boot2: update flash_write
This commit is contained in:
2
Makefile
2
Makefile
@@ -42,7 +42,7 @@ CFLAGS += --stack-auto --noinduction --use-non-free
|
|||||||
LDFLAGS = -m$(ARCH) -l$(ARCH) --out-fmt-ihx
|
LDFLAGS = -m$(ARCH) -l$(ARCH) --out-fmt-ihx
|
||||||
|
|
||||||
OPTION_BOOT := 0x480D
|
OPTION_BOOT := 0x480D
|
||||||
RAM_BOOT := 0x023E
|
RAM_BOOT := 0x0253
|
||||||
OPTFLAGS = -Wl-bOPTION=0x4800 -Wl-bOPTION_BOOT=$(OPTION_BOOT)
|
OPTFLAGS = -Wl-bOPTION=0x4800 -Wl-bOPTION_BOOT=$(OPTION_BOOT)
|
||||||
B2FLAGS = -Wl-bRAM_BOOT=$(RAM_BOOT)
|
B2FLAGS = -Wl-bRAM_BOOT=$(RAM_BOOT)
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -48,14 +48,12 @@ DEFAULT_SP_H = 0x0000 ; Saved with SP value
|
|||||||
DEFAULT_SP_L = 0x0001 ;
|
DEFAULT_SP_L = 0x0001 ;
|
||||||
rx_state = 2 ; 接收状态
|
rx_state = 2 ; 接收状态
|
||||||
rx_length = 3 ; 接收长度
|
rx_length = 3 ; 接收长度
|
||||||
tx_state = 4 ; 发送状态
|
tx_data_length = 4 ; 待发送的数据长度
|
||||||
tx_data_length = 5 ; 待发送的数据长度
|
calc_checksum = 5 ; 计算的校验和
|
||||||
calc_checksum = 6 ; 计算的校验和
|
temp_var1 = 6 ; 临时变量
|
||||||
temp_var1 = 7 ; 临时变量
|
temp_var2 = 7 ; 临时变量
|
||||||
temp_var2 = 8 ; 临时变量
|
tx_buffer = 0x0008 ; protocol tx buffer
|
||||||
temp_var3 = 9 ; 临时变量
|
rx_buffer = 0x0008 ; protocol rx buffer
|
||||||
tx_buffer = 0x000A ; protocol tx buffer
|
|
||||||
rx_buffer = 0x000A ; protocol rx buffer
|
|
||||||
|
|
||||||
BOOT2_ULA = 0x03CF ; boot2 ram Upper-Limit-Address
|
BOOT2_ULA = 0x03CF ; boot2 ram Upper-Limit-Address
|
||||||
|
|
||||||
@@ -293,8 +291,7 @@ _read_loop:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
; temp_var1: 待写入长度
|
; temp_var1: 待写入长度
|
||||||
; temp_var2: 单次写长度
|
; temp_var2: FLASH_IAPSR
|
||||||
; temp_var3: FLASH_IAPSR
|
|
||||||
write_memory:
|
write_memory:
|
||||||
; A = 写入长度
|
; A = 写入长度
|
||||||
ldw X, #rx_buffer+4
|
ldw X, #rx_buffer+4
|
||||||
@@ -302,7 +299,7 @@ write_memory:
|
|||||||
ld temp_var1, A
|
ld temp_var1, A
|
||||||
; 检查长度为0直接返回
|
; 检查长度为0直接返回
|
||||||
tnz A
|
tnz A
|
||||||
jreq _write_success
|
jreq _flash_write_success
|
||||||
|
|
||||||
; Y = src
|
; Y = src
|
||||||
incw X
|
incw X
|
||||||
@@ -330,53 +327,34 @@ _mem_write:
|
|||||||
incw Y
|
incw Y
|
||||||
dec temp_var1
|
dec temp_var1
|
||||||
jrne _mem_write
|
jrne _mem_write
|
||||||
ld A, #SUCCESS_CODE
|
jra _flash_write_success
|
||||||
callr send_ack_state_response
|
|
||||||
ret
|
|
||||||
|
|
||||||
_flash_write:
|
_flash_write:
|
||||||
; unlock FLASH/DATA
|
; unlock FLASH/DATA
|
||||||
callr unlock_flash
|
callr unlock_flash
|
||||||
|
|
||||||
; Word Program
|
_flash_byte_write:
|
||||||
mov FLASH_CR2, #0xC0
|
|
||||||
mov FLASH_NCR2, #0x3F
|
|
||||||
|
|
||||||
_word_write:
|
|
||||||
mov temp_var2, #4
|
|
||||||
_write_loop:
|
|
||||||
; Write a Word
|
|
||||||
ld A, (Y)
|
ld A, (Y)
|
||||||
ld (X), A
|
ld (X), A
|
||||||
incw X
|
|
||||||
incw Y
|
|
||||||
dec temp_var2
|
|
||||||
jrne _write_loop
|
|
||||||
; Wait write done
|
; Wait write done
|
||||||
_wait_flash_done:
|
_wait_flash_done:
|
||||||
mov temp_var3, FLASH_IAPSR
|
mov temp_var2, FLASH_IAPSR
|
||||||
btjt temp_var3, #0, _write_error
|
btjt temp_var2, #0, _flash_write_error
|
||||||
btjf temp_var3, #2, _wait_flash_done
|
btjf temp_var2, #2, _wait_flash_done
|
||||||
|
incw X
|
||||||
|
incw Y
|
||||||
|
dec temp_var1
|
||||||
|
jrne _flash_byte_write
|
||||||
|
|
||||||
ld A, temp_var1
|
|
||||||
cp A, #4
|
|
||||||
jrule _write_success
|
|
||||||
sub A, #4
|
|
||||||
ld temp_var1, A
|
|
||||||
jra _word_write
|
|
||||||
|
|
||||||
_write_error:
|
|
||||||
mov tx_state, #ERR_PGDIS
|
|
||||||
jra _write_end
|
|
||||||
_write_success:
|
|
||||||
mov tx_state, #SUCCESS_CODE
|
|
||||||
_write_end:
|
|
||||||
; Word programming off
|
|
||||||
mov FLASH_CR2, #0x00
|
|
||||||
mov FLASH_NCR2, #0xFF
|
|
||||||
; lock FLASH/DATA
|
|
||||||
callr lock_flash
|
callr lock_flash
|
||||||
ld A, tx_state
|
_flash_write_success:
|
||||||
|
ld A, #SUCCESS_CODE
|
||||||
|
call send_ack_state_response
|
||||||
|
ret
|
||||||
|
|
||||||
|
_flash_write_error:
|
||||||
|
callr lock_flash
|
||||||
|
ld A, #ERR_PGDIS
|
||||||
call send_ack_state_response
|
call send_ack_state_response
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@@ -392,6 +370,9 @@ _do_unlock_flash:
|
|||||||
_do_unlock_data:
|
_do_unlock_data:
|
||||||
mov FLASH_DUKR, #0xAE ; KEY1
|
mov FLASH_DUKR, #0xAE ; KEY1
|
||||||
mov FLASH_DUKR, #0x56 ; KEY2
|
mov FLASH_DUKR, #0x56 ; KEY2
|
||||||
|
; option byte programming on
|
||||||
|
mov FLASH_CR2, #0x80
|
||||||
|
mov FLASH_NCR2, #0x7F
|
||||||
ret
|
ret
|
||||||
|
|
||||||
lock_flash:
|
lock_flash:
|
||||||
@@ -403,6 +384,9 @@ _do_lock_flash:
|
|||||||
bres FLASH_IAPSR, #1
|
bres FLASH_IAPSR, #1
|
||||||
ret
|
ret
|
||||||
_do_lock_data:
|
_do_lock_data:
|
||||||
|
; option byte programming off
|
||||||
|
mov FLASH_CR2, #0x00
|
||||||
|
mov FLASH_NCR2, #0xFF
|
||||||
bres FLASH_IAPSR, #3
|
bres FLASH_IAPSR, #3
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user