flashing a device via boot loader works now!!
- use a simple rjmp to start main firmware - add buffer size as a parameter for com2ReceivePacketRaw - fixed bugs in - Flash_StartPage - Flash_FinishPage - Flash_ReadPageIntoPageBuffer - assume irqs disabled in flash routines - increase flash receive buffer size to 128
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
.equ FLASH_ERROR_NONE = 0
|
||||
.equ FLASH_ERROR_MSGERROR = 1
|
||||
|
||||
.equ FLASH_RECVBUFFER_MAXLEN = 128
|
||||
.equ FLASH_CMD_FLASH_RSP = 74
|
||||
|
||||
|
||||
@@ -37,8 +38,8 @@
|
||||
|
||||
flashDataBegin:
|
||||
flashUid: .byte 4
|
||||
flashSendBuffer: .byte 64
|
||||
flashRecvBuffer: .byte 64
|
||||
flashSendBuffer: .byte 32
|
||||
flashRecvBuffer: .byte FLASH_RECVBUFFER_MAXLEN
|
||||
flashDataEnd:
|
||||
|
||||
|
||||
@@ -120,21 +121,12 @@ bootLoader_loop1:
|
||||
; try to start firmware
|
||||
bootLoader_startFirmware:
|
||||
sbi PORTA, PORTA3 ; LED off
|
||||
|
||||
cbi PORTA, PORTA2 ; on (debug)
|
||||
ldi r16, 20
|
||||
rcall flashWaitForMulti100ms
|
||||
rjmp firmwareStart
|
||||
|
||||
ldi zl, LOW(firmwareStart*2)
|
||||
ldi zh, HIGH(firmwareStart*2)
|
||||
lpm r20, Z+
|
||||
lpm r21, Z+
|
||||
mov r16, r20
|
||||
or r16, r21
|
||||
breq bootLoader ; restart boot loader
|
||||
|
||||
; jmp via stack
|
||||
push r20
|
||||
push r21
|
||||
ret
|
||||
bootLoader_waitAndRestartBootLoader:
|
||||
sbi PORTA, PORTA3 ; LED off
|
||||
ldi r16, 20
|
||||
@@ -228,6 +220,7 @@ flashWaitForSpecificMessage_loop1:
|
||||
flashWaitForSpecificMessage_isLow: ; is low, receive message, check for msg type
|
||||
push r17
|
||||
ldi r16, COM2_MAINTENANCE_ADDR
|
||||
ldi r17, FLASH_RECVBUFFER_MAXLEN-3
|
||||
ldi xl, LOW(flashRecvBuffer)
|
||||
ldi xh, HIGH(flashRecvBuffer)
|
||||
rcall com2ReceivePacketRaw
|
||||
@@ -545,17 +538,16 @@ flashHandleFlashStart_notMe:
|
||||
|
||||
flashHandleFlashData:
|
||||
adiw xh:xl, FLASH_MSG_OFFS_MSGLEN
|
||||
ld r18, X ; length
|
||||
cpi r18, 2+2+4 ; dest, msglen + cmd, src + addr
|
||||
ld r18, X ; length (subtract 6
|
||||
cpi r18, 6 ; cmd(1), src(1), addr(4)
|
||||
brcs flashHandleFlashData_badData
|
||||
subi r18, 2+2+4 ; remaining length
|
||||
subi r18, 6 ; remaining length
|
||||
adiw xh:xl, FLASH_PACKET_DATA_OFFS_ADDR-FLASH_MSG_OFFS_MSGLEN
|
||||
ld zl, X+ ; address (low)
|
||||
ld zh, X+ ; address (high)
|
||||
adiw xh:xl, 2 ; ignore high bytes, points to first data byte now
|
||||
|
||||
cbi PORTA, PORTA2 ; on (debug)
|
||||
rcall Flash_StartPage ; (R0, R1, R15, R16, R20, R24, R25)
|
||||
; rcall Flash_StartPage ; (R0, R1, R16, R20, R24, R25)
|
||||
push zl
|
||||
push zh
|
||||
flashHandleFlashData_loop:
|
||||
@@ -567,7 +559,6 @@ flashHandleFlashData_loop:
|
||||
pop zh
|
||||
pop zl
|
||||
rcall Flash_FinishPage ; (R15, R16, R20)
|
||||
sbi PORTA, PORTA2 ; off (debug)
|
||||
clr r16
|
||||
rjmp flashHandleFlashData_sendResponse
|
||||
flashHandleFlashData_badData:
|
||||
|
||||
Reference in New Issue
Block a user