stm8loader add exec

This commit is contained in:
2025-12-22 00:30:10 +08:00
parent c0ade721c5
commit a0f940af72
4 changed files with 308 additions and 234 deletions

View File

@@ -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 := 0x0232 RAM_BOOT := 0x023E
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.

View File

@@ -96,15 +96,15 @@ _main_loop:
_invalid_cmd_error: _invalid_cmd_error:
; 未知命令,发送错误响应 ; 未知命令,发送错误响应
mov tx_state, #ERR_INVCMD ld A, #ERR_INVCMD
_ack_then_back:
call send_ack_state_response call send_ack_state_response
jra _main_loop jra _main_loop
_checksum_error: _checksum_error:
; 校验和错误响应 ; 校验和错误响应
mov tx_state, #ERR_CHECKSUM ld A, #ERR_CHECKSUM
call send_ack_state_response jra _ack_then_back
jra _main_loop
_cmd_read: _cmd_read:
; 读取内存命令 ; 读取内存命令
@@ -127,7 +127,8 @@ _cmd_exec:
ld A, #0x81 ; ret code ld A, #0x81 ; ret code
ld (X), A ; X point to checksum already ld (X), A ; X point to checksum already
call rx_buffer call rx_buffer
jra _main_loop ld A, #SUCCESS_CODE
jra _ack_then_back
receive_frame: receive_frame:
; 初始化接收状态 ; 初始化接收状态
@@ -204,12 +205,18 @@ _verify_loop:
ret ret
send_response_pkg: send_response_pkg:
clr calc_checksum ; set header
ldw X, #tx_buffer ldw X, #tx_buffer
ld A, #ACK_HEADER
ld (X), A
; tx_data_length += 5
ld A, tx_data_length ld A, tx_data_length
add A, #5 add A, #5
ld temp_var1, A ld temp_var1, A
; send data ; send data
clr calc_checksum
_send_loop: _send_loop:
ld A, (X) ld A, (X)
ld UART1_DR, A ld UART1_DR, A
@@ -222,49 +229,39 @@ _wait_tx1:
incw X incw X
dec temp_var1 dec temp_var1
jrne _send_loop jrne _send_loop
; send checksum ; send checksum
ld A, calc_checksum ld A, calc_checksum
ld UART1_DR, A ld UART1_DR, A
_wait_tx2: _wait_tx2:
btjf UART1_SR, #7, _wait_tx2 btjf UART1_SR, #7, _wait_tx2
; finish ; finish
ret ret
; 发送应答状态帧 ; 发送应答状态帧
send_ack_state_response: send_ack_state_response:
; set header ; set data
ldw X, #tx_buffer ldw X, #tx_buffer+5
ld A, #ACK_HEADER
ld (X), A ld (X), A
; set length ; set length
addw X, #4 decw X
ld A, #1 ld A, #1
ld (X), A ld (X), A
ld tx_data_length, A ld tx_data_length, A
; set data
incw X
ld A, tx_state
ld (X), A
callr send_response_pkg callr send_response_pkg
ret ret
; 发送应答数据帧 ; 发送应答数据帧
send_ack_data_response: send_ack_data_response:
; set header
ldw X, #tx_buffer
ld A, #ACK_HEADER
ld (X), A
; set length ; set length
addw X, #4 ldw X, #tx_buffer+4
ld A, tx_data_length ld A, tx_data_length
ld (X), A ld (X), A
; already set data ; already set data
callr send_response_pkg callr send_response_pkg
ret ret
@@ -333,6 +330,7 @@ _mem_write:
incw Y incw Y
dec temp_var1 dec temp_var1
jrne _mem_write jrne _mem_write
ld A, #SUCCESS_CODE
callr send_ack_state_response callr send_ack_state_response
ret ret
@@ -378,6 +376,7 @@ _write_end:
mov FLASH_NCR2, #0xFF mov FLASH_NCR2, #0xFF
; lock FLASH/DATA ; lock FLASH/DATA
callr lock_flash callr lock_flash
ld A, tx_state
call send_ack_state_response call send_ack_state_response
ret ret

File diff suppressed because it is too large Load Diff