STM8S103F3 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдмреВрдЯрд▓реЛрдбрд░ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдЙрдкрд▓рдмреНрдз рдмреВрдЯрд▓реЛрдбрд░реНрд╕ рдореЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ "C", "FL" рдореЗрдореЛрд░реА рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд╛рд╢рд┐ "рдЪреЛрд░реА" рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, рдФрд░ рдмрд╛рдзрд┐рдд рд╡реИрдХреНрдЯрд░ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдмреВрдЯрд▓реЛрдбрд░ рдХреБрдЫ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рдмреВрдЯрд▓реЛрдбрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
- рд▓реЛрдбрд░ рдХреЛ STM8uLoader рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рдХреЛрдб рдХреЛ рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреЛрдбрд╛рдВрддрд░рдХ рдХрд╛ рд▓рд╛рдн рдЕрднреА рддрдХ рдХрд╛рдиреВрдиреА рд░реВрдк рд╕реЗ рдирд┐рд╖рд┐рджреНрдз рдирд╣реАрдВ рд╣реИ);
- рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд╕рдВрднрд╡ рд░рд╛рд╢рд┐ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рдХрдмреНрдЬрд╛ рдХреА рдЧрдИ рд░рд╛рд╢рд┐ рдХреЛ рдЕрд╕реАрдорд┐рдд рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛;
- рд▓реЛрдбрд░ рдХреЛ рдмрд╛рдзрд┐рдд рд╡реИрдХреНрдЯрд░ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд╕рднреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд▓реА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП;
- рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рд░реАрд╕реЗрдЯ / рдкрд╛рд╡рд░-рдСрди рдХреЗ рдмрд╛рдж рдЙрдЪрд┐рдд рд╕рдордп рдХреЗ рднреАрддрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИред
рдкрд╣рд▓реА рд╢рд░реНрдд рддреБрд░рдВрдд
рдкреВрд░реА рд╣реЛ рдЧрдИ рдереА , рд▓реЗрдХрд┐рди рдмрд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред
рдкрд╣рд▓рд╛ рдЪрд░рдгред рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ 65 рдмрд╛рдЗрдЯреНрд╕ рдХреЛрдб
рд╡реЗрдХреНрдЯрд░ рдЯреЗрдмрд▓ рдХреЛ рдЙрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝реНрд▓реИрд╢ рдореЗрдореЛрд░реА рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрдб рд░рдЦрдиреЗ рдФрд░ рдбрдВрдк рд╡реЗрдХреНрдЯрд░ рд╕реЗ рдЗрд╕реЗ рддреБрд░рдВрдд рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ $ 8000ред
рдмреВрдЯ рдкрд░, рдирд┐рдпрдВрддреНрд░рдг $ 9FC2 рдкрд░ рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЛрдбрд░ UART 9600 8N1 рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, UART рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рдЬреЛрдбрд╝реЗ $ 9FFE: $ 9FFF рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрддреЗ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рд▓реЛрдбрд░ рдХреЛ рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдбрдВрдк рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЙрдЪреНрдЪ рдФрд░ рдирд┐рдореНрди рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдбрдВрдк рдХреЛ рдЦреБрдж рд▓реЗрддрд╛ рд╣реИ, рдбрдВрдк рдХреЛ рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рджреЗрдЦрднрд╛рд▓ рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рдЗрд╕реЗ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдбрдВрдк рдХреЗ рд╕рд╛рде рдирд┐рд╣рд┐рдд рд╣реИред рдпрд╣ рдЙрди рдбрдВрдкреЛрдВ рдХреЛ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ (рдореЗрдореЛрд░реА рд╕реЗрд▓ STM8 рдкрдврд╝реЗрдВ / рдорд┐рдЯрд╛рдПрдВ / рд▓рд┐рдЦреЗрдВ / рдХреЙрдкреА рдХрд░реЗрдВ)ред рдбрдВрдк рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдкрддрд╛ $ 9FFE: $ 9FFF рд╣реИред
рдлрд╝рд╛рдЗрд▓ boot_FLASH.asm:stm8/ TITLE "boot_FLASH.asm" .NOLIST #include "STM8S103F3P.inc" .LIST MOTOROLA WORDS segment byte at 8000 'boot_start' boot_start: jp boot_FLASH_start dc.b $00 ; boot_FLASH ; ******************************************************** ; 0x8004...0x9FC1 WORDS ; segment byte at 8004 'main_FLASH' main_FLASH_start: ldw X, #$03FF ldw SP, X mov UART1_BRR1, #13 mov UART1_CR2, #%00001100 main_FLASH_cycle: callr main_delay ; bset PB_DDR,#5 bset PB_CR1,#5 ; byte1_tx: mov UART1_DR, #$80 byte1_wait_tx btjf UART1_SR, #7, byte1_wait_tx callr main_delay boot_RAM_exit1: ; bres PB_DDR,#5 ; bres PB_CR1,#5 ; ; byte2_tx: mov UART1_DR, #$08 byte2_wait_tx btjf UART1_SR, #7, byte2_wait_tx jra main_FLASH_cycle main_delay: decw X jrne main_delay ret segment byte at 9FC2 'boot_FLASH' boot_FLASH_start: mov UART1_BRR1, #13; Fmaster=16/8=2/9600/16 mov UART1_CR2, #%00001100; / ; UART1 RST_SR boot_FLASH_RST_SR_tx: mov UART1_DR, RST_SR ; , ; ; X ( 200 ) ldw X,#0 boot_FLASH_wait_byte1: decw X jreq boot_FLASH_exit; btjf UART1_SR, #5, boot_FLASH_wait_byte1 ; , , ; X ld A, UART1_DR ld XH, A ; boot_FLASH_wait_byte2: btjf UART1_SR, #5, boot_FLASH_wait_byte2 ; ld A, UART1_DR ld XL, A ; X - ; X ldw Y, #$0400 ; Y 0x0400 (RAM_END + 1) ; boot_FLASH_rx_block_wait: btjf UART1_SR, #5, boot_FLASH_rx_block_wait boot_EEPROM_rx_block_entry: decw Y ; Y ld A, UART1_DR ld (Y), A decw X ; X jrne boot_FLASH_rx_block_wait ; jp (Y) ; () boot_FLASH_exit: dc.b $CC boot_FLASH_exit_addr: dc.w main_FLASH_start end ;
рджреВрд╕рд░рд╛ рдЪрд░рдгред рдореЗрдореЛрд░реА рдореЗрдВ рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ 21 рдмрд╛рдЗрдЯреНрд╕ рдФрд░ EEPROM рдореЗрдВ 52 рдмрд╛рдЗрдЯреНрд╕
рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рд╕реЗ 65 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ (STM8S103F3 рдореЗрдВ рдпрд╣ рдХреЗрд╡рд▓ 8192 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ) рдорд╛рдирд╡реАрдп рдирд╣реАрдВ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЕрдкрдиреЗ 640 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдирд╛рд╡рд╢реНрдпрдХ EEPROM рд╕реНрдореГрддрд┐ рдкрд╛рд╕ рдореЗрдВ рдкрдбрд╝реА рд╣реИред рдЪрд▓рд┐рдП рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ boot_FLASH рдФрд░ boot_EEPROMред
рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдирд┐рдпрдВрддреНрд░рдг $ 9FEF рдкрд░ boot_FLASH рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред boot_FLASH, EEPROM рд╕реЗ RAM рдореЗрдореЛрд░реА рдореЗрдВ boot_EEPROM рдХреЛрдб рдЫрд╡рд┐ рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдм boot_EEPROM UART 9600 8N1 рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, UART рдмрд╛рдЗрдЯреНрд╕ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╣рдо рдкрддреЗ рдХреЛ рдЙрд╕реА рдЬрдЧрд╣ $ 9FFE: $ 9FFF рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ)ред
рдпрджрд┐ RAM_EEPROM RAM рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рдбрдВрдк рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рдЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдбрдВрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдбрдВрдк рдХреЛ RAM рдореЗрдореЛрд░реА рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рд╣реИред
рдлрд╝рд╛рдЗрд▓ boot_FLASH_EEPROM.asm: stm8/ TITLE "boot_FLASH_EEPROM.asm" .NOLIST #include "STM8S103F3P.inc" .LIST MOTOROLA WORDS segment byte at 4000 'eeprom' ; boot_EEPROM dc.b $35, $0D, $52, $32, $35, $0C, $52, $35 dc.b $35, $01, $52, $31, $5A, $27, $16, $72 dc.b $0B, $52, $30, $F8, $C6, $52, $31, $72 dc.b $0B, $52, $30, $FB, $3B, $52, $31, $4A dc.b $26, $F5, $96, $5C, $FC, $CE, $9F, $FE dc.b $2B, $FA, $90, $AE, $42, $7F, $AE, $02 dc.b $7F, $CC, $9F, $F4 segment byte at 8000 'boot_start' boot_start: jp boot_FLASH_start dc.b $01 ; boot_FLASH_EEPROM ; ******************************************************** ; 0x8004...0x9FEE segment byte at 8004 'main_FLASH' ; main_FLASH_start: ldw X, #$03FF ldw SP, X mov UART1_BRR1, #13 mov UART1_CR2, #%00001100 main_FLASH_cycle: callr main_delay ; bset PB_DDR,#5 bset PB_CR1,#5 ; byte1_tx: mov UART1_DR, #$80 byte1_wait_tx btjf UART1_SR, #7, byte1_wait_tx callr main_delay boot_RAM_exit1: ; bres PB_DDR,#5 ; bres PB_CR1,#5 ; ; byte2_tx: mov UART1_DR, #$08 byte2_wait_tx btjf UART1_SR, #7, byte2_wait_tx jra main_FLASH_cycle main_delay: decw X jrne main_delay ret ; EEPROM -> RAM segment byte at 9FEF 'boot_FLASH' boot_FLASH_start: ldw X, SP ; Y <- { EEPROM_START + RAM_END} ; Y <- { $4000 + $03FF = $43FF } ldw Y, #$43FF boot_FLASH_copy: ld A, (Y) ld (X), A decw Y decw X jrpl boot_FLASH_copy incw X jp (X) boot_FLASH_exit_address: dc.w main_FLASH_start end ;
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдПрдБ
runSTM8uLoader.bat , рдмреЛрд░реНрдб рдкрд░ рд░реАрд╕реЗрдЯ рдмрдЯрди рджрдмрд╛рдПрдВ, рдмреВрдЯрд▓реЛрдбрд░ рдмрд╛рдЗрдЯ 00101 рднреЗрдЬрддрд╛ рд╣реИред U_ART рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RAM STM8 рдХреЗ рд▓рд┐рдП main_RAM.hex рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХреЛрдб рд╡рд╛рд▓рд╛ рдПрдХ рдбрдВрдк рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЛрд░реНрдб рдПрд▓рдИрдбреА рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдЯреНрд╕ 0x20 рдФрд░ 0x02 рднреЗрдЬрддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рд░реАрд╕реЗрдЯ рдмрдЯрди рджрдмрд╛рдПрдВред рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрд▓рдИрдбреА рддреЗрдЬреА рд╕реЗ рдмреНрд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдЯреНрд╕ 0x80 рдФрд░ 0x08 рднреЗрдЬрддрд╛ рд╣реИред

рддреАрд╕рд░рд╛ рдЪрд░рдгред рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рдХреЛрдб рдЖрдХрд╛рд░ 18 рдмрд╛рдЗрдЯреНрд╕ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ 52 рдмрд╛рдЗрдЯреНрд╕
рдмреЗрд╢рдХ, рд╣рдо EEPROM рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдЬрд▓реНрджрдмрд╛рдЬреА рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рд╕рд╛рдЗрди рдФрд░ рдЕрдиреНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдХрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ? рдФрд░ рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрдВрдЯреНрд░реЛрд▓ рдПрдбреНрд░реЗрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рдХрд┐рд╕рдиреЗ рд▓рд┐рдпрд╛? рдФрд░ рдмреВрдЯрд▓реЛрдбрд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдПрдХ рд╣реА рдмрд╛рдЗрдЯ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред EEPROM рдХреЗ рд▓рд┐рдП 52 рдмрд╛рдЗрдЯреНрд╕ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдБ?
рдпрд╣рд╛рдБ рд▓рд┐рдереЛрдЧреНрд░рд╛рдлреА рд╣рдорд╛рд░реА рдорджрдж рдХрд░рддреА рд╣реИред EEPROM рдореЗрдореЛрд░реА рдореЗрдВ 64 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ 10 рдмреНрд▓реЙрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЗрди рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рдПрдХ рдФрд░ рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рдирд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде, рдЖрд░реНрдерд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред STMicroelectronics рдиреЗ рдмрд╕ рдЗрддрдирд╛ рд╣реА рдХрд┐рдпрд╛, рдПрдХ рдФрд░ 64-рдмрд╛рдЗрдЯ рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рд╛, рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо OPTION рдмрд╛рдЗрдЯреНрд╕ рд░рдЦрд╛ рдФрд░ рд╡рд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреИрд░-рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ (STM8S103F3 рдХреЗ рд▓рд┐рдП рдпрд╣ 11 рдмрд╛рдЗрдЯреНрд╕ рдЬрд┐рддрдирд╛ рд╣реИ)ред рдФрд░ рд╣рд╛рдВ, рдПрд╕рдЯреАрдПрдо рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрднреА рднреА 53 рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╢реЗрд╖ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдПрд╕рдЯреАрдПрдо 8 рдореЙрдбрд▓ рд╣реИрдВ, рдЖрдкрдХреЛ рднрд╡рд┐рд╖реНрдп рдХреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдмреВрдЯрд▓реЛрдбрд░ рдмрд┐рдирд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмреВрдЯрд▓реЛрдбрд░реНрд╕ рдХреЗ рдХреЗрд╡рд▓ рдПрд╕рдЯреАрдПрдо 8 рдореЙрдбрд▓ рдкрд░ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдЯреНрд╕ рдмреНрд▓реЙрдХ рдХреА рдмреИрдХрдЕрдк рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдм рддрдХ рдХреЛрдИ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИред рд╕рдЪ рд╣реИ, рдПрдХ рдЫреЛрдЯрд╛,
рд▓реЗрдХрд┐рди рд╣рд▓ рд╣реИ , рдЕрд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдПрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЖрдкрдХреЛ рдЗрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред
рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдирд┐рдпрдВрддреНрд░рдг $ 9FF2 рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ copy_boot_FLASH рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред boot_FLASH рдмреВрдЯ_OPTION рдмреВрдЯ рд▓реЛрдбрд░ рдЫрд╡рд┐ рдХреЛ рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдЯ рдХреНрд╖реЗрддреНрд░ рд╕реЗ RAM рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
boot_OPTION UART 9600 8N1 рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде UART рдмрд╛рдЗрдЯ рднреЗрдЬрддрд╛ рд╣реИ, рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ UART рдмрд╛рдЗрдЯреНрд╕ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ 0.2 рд╕реЗрдХрдВрдб рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЬреЛрдбрд╝реА рдореЗрдВ рд╕реНрдерд┐рдд рдкрддреЗ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ $ 4831: $ 4832ред
рдпрджрд┐ boot_OPTION, рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рдЗрдЯ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдкреЗрдХреНрд╖рд┐рдд рдбрдВрдк рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдмрд╛рдЗрдЯ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдбрдВрдк рдХреЛ рд╕реНрд╡рдпрдВ рд▓реЗрддрд╛ рд╣реИ, рдбрдВрдк рдХреЛ рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рджреЗрдЦрднрд╛рд▓ рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рдЗрд╕реЗ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдбрдВрдк рдХреЗ рд╕рд╛рде рдирд┐рд╣рд┐рдд рд╣реИред рдпрд╣ рдЙрди рдбрдВрдкреЛрдВ рдХреЛ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ (рдореЗрдореЛрд░реА рд╕реЗрд▓ STM8 рдкрдврд╝реЗрдВ / рдорд┐рдЯрд╛рдПрдВ / рд▓рд┐рдЦреЗрдВ / рдХреЙрдкреА рдХрд░реЗрдВ)ред рдбрдВрдк рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХрд╛ рдкрддрд╛ $ 4831: $ 4832 рд╣реИред
рд▓реЛрдбрд░ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдлрд╝реНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: stm8/ TITLE "boot_FLASH_OPTION.asm" .NOLIST #include "STM8S103F3P.inc" .LIST MOTOROLA WORDS segment byte at 4800 'boot_OPTION' ; boot_OPTION dc.b $00, $00, $FF, $00, $FF, $00, $FF, $00 dc.b $FF, $00, $FF, $35, $0D, $52, $32, $35 dc.b $0C, $52, $35, $35, $25, $52, $31, $5A dc.b $27, $16, $72, $0B, $52, $30, $F8, $C6 dc.b $52, $31, $72, $0B, $52, $30, $FB, $3B dc.b $52, $31, $4A, $26, $F5, $96, $5C, $FC dc.b $AE, $80, $04, $2B, $FA, $90, $AE, $42 dc.b $7F, $AE, $02, $7F, $CC, $9F, $F6, $00 segment byte at 8000 'boot_start' boot_start: ldw X, SP jp boot_FLASH_start ; ******************************************************** ; 0x8004...0x9FF1 segment byte at 8004 'main_FLASH' ; main_FLASH_start: ldw X, #$03FF ldw SP, X mov UART1_BRR1, #13 mov UART1_CR2, #%00001100 main_FLASH_cycle: callr main_delay ; bset PB_DDR,#5 bset PB_CR1,#5 ; byte1_tx: mov UART1_DR, #$80 byte1_wait_tx btjf UART1_SR, #7, byte1_wait_tx callr main_delay boot_RAM_exit1: ; bres PB_DDR,#5 ; bres PB_CR1,#5 ; ; byte2_tx: mov UART1_DR, #$08 byte2_wait_tx btjf UART1_SR, #7, byte2_wait_tx jra main_FLASH_cycle main_delay: decw X jrne main_delay ret ; OPTION -> RAM segment byte at 9FF2 'boot_FLASH' boot_FLASH_start: ; Y <- { OPTION_START + RAM_END} ; Y <- { $4800 + $03FF = $43FF } ldw Y, #$43FF boot_FLASH_copy: ld A, (Y) ld (X), A decw Y decw X jrpl boot_FLASH_copy incw X jp (X) boot_FLASH_exit_address: dc.w main_FLASH_start end ;
RAM рдореЗрдореЛрд░реА рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЛрдб: stm8/ TITLE тАЬboot_RAM.asmтАЭ MOTOROLA #include "STM8S103F3P.inc" BYTES segment byte at 0000 'boot_RAM_data' boot_RAM_start: ; pull-up ( ) , , 14 ; ld A, #%01001100 ; [A6 4C] ; cpl A ; [43] ; ld PA_CR1, A ; [C7 50 03] ; ld PB_CR1, A ; [C7 50 08] ; ld PC_CR1, A ; [C7 50 0D] ; ld PD_CR1, A ; [C7 50 12] PD6(UART1_RX), PD2, PD1 ; UART1 / 9600, (8 , , 1 ) ; mov UART1_BRR2, #0 ; [35 00 52 33] Fmaster=16/8=2 9600 mov UART1_BRR1, #13 ; [35 0D 52 32] Fmaster=16/8=2 9600 mov UART1_CR2, #%00001100 ; [35 0C 52 35] UART1_CR2.TEN <- 1 UART1_CR2.REN <- 1 / ; UART1 boot_RAM_byte1_tx: mov UART1_DR, #$02 boot_RAM_byte1_wait_tx btjf UART1_SR, #7, boot_RAM_byte1_wait_tx ldw X,#0 ; [AE 00 00] boot_FLASH X boot_RAM_wait1: decw X ; [5A] jreq boot_RAM_exit1 ; jra boot_RAM_wait1 boot_RAM_exit1: ; bres PB_DDR,#5 ; bres PB_CR1,#5 ; ; UART1 boot_RAM_byte2_tx: mov UART1_DR, #$20 ; [35 11 52 31] boot_RAM_byte2_wait_tx btjf UART1_SR, #7, boot_RAM_byte2_wait_tx ldw X,#0 ; [AE 00 00] boot_FLASH X boot_RAM_wait2: decw X ; [5A] jreq boot_RAM_exit2 ; jra boot_RAM_wait2 boot_RAM_exit2: ; bset PB_DDR,#5 ; bset PB_CR1,#5 ; jra boot_RAM_byte1_tx end
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдПрдБ
runSTM8uLoader.bat , рдмреЛрд░реНрдб рдкрд░ рд░реАрд╕реЗрдЯ рдмрдЯрди рджрдмрд╛рдПрдВ, рдмреВрдЯрд▓реЛрдбрд░ рдмрд╛рдЗрдЯ 02525 рднреЗрдЬрддрд╛ рд╣реИред U_ART рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RAM STM8 рдХреЗ рд▓рд┐рдП main_RAM.hex рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХреЛрдб рд╡рд╛рд▓рд╛ рдПрдХ рдбрдВрдк рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЛрд░реНрдб рдПрд▓рдИрдбреА рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдЯреНрд╕ 0x20 рдФрд░ 0x02 рднреЗрдЬрддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рд░реАрд╕реЗрдЯ рдмрдЯрди рджрдмрд╛рдПрдВред рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрд▓рдИрдбреА рддреЗрдЬреА рд╕реЗ рдмреНрд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдЯреНрд╕ 0x80 рдФрд░ 0x08 рднреЗрдЬрддрд╛ рд╣реИред

рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ, рдмреВрдЯрд▓реЛрдбрд░ рдЫрд╡рд┐ рдХреЛ рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдЯреНрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рдзрд┐ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ STM8 FLAH рдореЗрдореЛрд░реА рдореЗрдВ boot_OPTION_rev25.hex рдлрд░реНрдорд╡реЗрдпрд░ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ, рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдЯреНрд╕ рдХреНрд╖реЗрддреНрд░ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рднрд░ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрд▓рдИрдбреА рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ FLASH рдлрд░реНрдорд╡реЗрдпрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ
рд▓рд┐рдЦрддрд╛ рд╣реИ boot_FLASH_OPTION.hex ред
рдЖрд╡реЗрджрди рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ "рд╕рд╛рдл" рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг 0x14 рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ boot_OPTION рдЫрд╡рд┐ рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ред рд╕рд╣реА рдЯрд┐рдкреНрдкрдгреАред $ 25 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рдкрддрд╛ $ 9FFE: $ 9FFFF FLASH рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╣реИред FLASH рдореЗрдВ рдЖрдХрд╛рд░ рдХреНрд░рдорд╢рдГ 20 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред
boot_uC_rev14.asm: stm8/ TITLE "boot_uC_rev14.asm" ; boot_uC = boot_OPTION + boot_FLASH MOTOROLA .NOLIST #include "STM8S103F3P.inc" .LIST WORDS ; ******************************************************** segment byte at 4800 'boot_O_IMG' ;0000FF00FF00FF00FF00FF350D523235 ;0C5235351452315A2716720B5230F8C6 ;5231720B5230FB3B52314A26F5965CFC ;CE9FFE2BFA90AE427FAE027FCC9FF400 ; ; $4800 RAM dc.b $00, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF ; OPTION (RAM) ; $480B ($0000) boot_O boot_O_start: ; UART 96008N1 Fmaster=16/8=2/9600/16 ; mov UART1_BRR2, #0 ; [35 00 52 33] mov UART1_BRR1, #13 ; [35 0D 52 32] ; UART1_CR2.TEN <- 1 UART1_CR2.REN <- 1 / mov UART1_CR2, #%00001100 ; [35 0C 52 35] ; $4813 ($0008) boot_E_byte1_tx: ; $14 mov UART1_DR, #$14 ; [35 14 52 31] ; , ; ; X ( 200 ) ; clrw X ; [5F] X boot_F ; $4817 ($000C) boot_O_rx_wait_byte: decw X ; [5A] jreq boot_O_exit ; [27 16] btjf UART1_SR, #5, boot_O_rx_wait_byte ; [72 OB 52 30 F8] ; , , A ; $481F ($0014) ld A, UART1_DR ; [C6 52 31] ; $4822 ($0017) boot_O_rx_wait_block: btjf UART1_SR, #5, boot_O_rx_wait_block ; [72 OB 52 30 FB] push UART1_DR ; [3B 52 31] dec A ; [4A] ; A jrne boot_O_rx_wait_block ; [26 F5] ; $482D ($0022) ldw X, SP ; [96] incw X ; [5C] boot_O_exit_to_FLASH: jp (X) ; [FC] ; $4830 ($0025) boot_O_exit: ldw X, boot_F_exit_address ; [CE 9F FE] jrmi boot_O_exit_to_FLASH ; [2B FA] ; if X < $8000 $0000 ; EEPROM boot_O_exit_to_EEPROM: ; Y <- { EEPROM_END} ldw Y, #$427F ; [90 AE 42 7F] ; X <- { EEPROM_END - EEPROM_START } ; EEPROM RAM ldw X, #$027F ; [AE 02 7F] jp boot_F_copy ; [CC 9F F4] ; $483F ($0034) dc.b $00 ; boot_O_end: ; ******************************************************** segment byte at 8000 'RESET_vector' ;96CC9FF0 ldw X, SP ; [96] X <- RAM_END jp boot_F_start ; [CC 9F F0] ; ******************************************************** ; 0x8004...0x9FEF segment byte at 8004 'main_FLASH' ;20FE jra * ; [20 FE] ; ******************************************************** ; boot_FLASH segment byte at 9FF0 'boot_F' ;90AE4C0A90F6F7905A5A2AF85CFC8004 boot_F_start: ; Y <- { boot_O_START + RAM_END} { $480B + $03FF = $4C0A } ldw Y, #$4C0A ; [90 AE 4C 0A] ; ; boot_FLASH, boot_OPTION boot_F_copy: ld A, (Y) ; [90 F6] ld (X), A ; [F7] decw Y ; [90 5A] decw X ; [5A] jrpl boot_F_copy ; [2A F8] X(Y) >= RAM_START(boot_O_START) incw X ; [5C] jp (X) ; [FC] boot_F_exit_address: dc.w $8004 ; [80 04] ; dc.w $0000 ; [00 00] end ;
рдЖрд╡реЗрджрди рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рдПрдХ "рд╕рд╛рдл" рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг 0x25 рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ boot_OPTION рдЫрд╡рд┐ рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ред рд╕рд╣реА рдЯрд┐рдкреНрдкрдгреАред $ 14 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЖрд╡реЗрджрди рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рдкрддрд╛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╣реИ $ 4831: рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдЯреНрд╕ рдХреНрд╖реЗрддреНрд░ рдХрд╛ $ 4832ред рдХреНрд░рдорд╢рдГ FLASH рдореЗрдореЛрд░реА рдореЗрдВ рдХрдмреНрдЬреЗ рдХрд╛ рдЖрдХрд╛рд░ рдШрдЯрдХрд░ 18 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛ рдЧрдпрд╛ред рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдЯреНрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡реНрдпрд╛рдкреНрдд рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ (52 рдмрд╛рдЗрдЯреНрд╕ + 1 рд░рд┐рдЬрд░реНрд╡)ред
boot_uC_rev14.asm: stm8/ TITLE "boot_uC_rev25.asm" ; boot_uC = boot_OPTION + boot_FLASH MOTOROLA .NOLIST #include "STM8S103F3P.inc" .LIST BYTES ; ******************************************************** ; EEPROM ; boot_O_exit_address $0000 ( <$8000) ; ; segment byte at 0000 'boot_O_IMG' main_ram: ;20FE jra * ; [20 FE] WORDS ; ******************************************************** segment byte at 4800 'boot_O_IMG' ;0000FF00FF00FF00FF00FF350D523235 ;0C5235351452315A2716720B5230F8C6 ;5231720B5230FB3B52314A26F5965CFC ;AE80042BFA90AE427FAE027FCC9FF600 ; ; $4800 RAM dc.b $00, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF ; OPTION (RAM) ; $480B ($0000) boot_OPTION boot_O_start: ; UART 96008N1 Fmaster=16/8=2/9600/16 ; mov UART1_BRR2, #0 ; [35 00 52 33] mov UART1_BRR1, #13 ; [35 0D 52 32] ; UART1_CR2.TEN <- 1 UART1_CR2.REN <- 1 / mov UART1_CR2, #%00001100 ; [35 0C 52 35] ; $4813 ($0008) boot_E_byte1_tx: ; $14 mov UART1_DR, #$14 ; [35 14 52 31] ; , ; ; X ( 200 ) ; clrw X ; [5F] X boot_F ; $4817 ($000C) boot_O_rx_wait_byte: decw X ; [5A] jreq boot_O_exit ; [27 16] btjf UART1_SR, #5, boot_O_rx_wait_byte ; [72 OB 52 30 F8] ; , , A ; $481F ($0014) ld A, UART1_DR ; [C6 52 31] ; $4822 ($0017) boot_O_rx_wait_block: btjf UART1_SR, #5, boot_O_rx_wait_block ; [72 OB 52 30 FB] push UART1_DR ; [3B 52 31] dec A ; [4A] ; A jrne boot_O_rx_wait_block ; [26 F5] ; $482D ($0022) ldw X, SP ; [96] incw X ; [5C] boot_O_exit_to_FLASH: jp (X) ; [FC] ; $4830 ($0025) boot_O_exit: dc.b $AE ; ldw X, #boot_O_exit_address ; [AE 80 04] ; $4831 ($0026) ; boot_O_exit_address: dc.w main_flash ; [80 04] ; dc.w main_ram ; [00 00] jrmi boot_O_exit_to_FLASH ; [2B FA] ; if X < $8000 $0000 ; EEPROM boot_O_exit_to_EEPROM: ; Y <- { EEPROM_END} ldw Y, #$427F ; [90 AE 42 7F] ; X <- { EEPROM_END - EEPROM_START } ; EEPROM RAM ldw X, #$027F ; [AE 02 7F] jp boot_F_copy ; [CC 9F F4] ; $483F ($0034) dc.b $00 ; boot_O_end: ; ******************************************************** segment byte at 8000-8003 'RESET_vector' ;96CC9FF2 ldw X, SP ; [96] X <- RAM_END jp boot_F_start ; [CC 9F F2] ; ******************************************************** ; 0x8004...0x9FF1 segment byte at 8004 'main_FLASH' main_flash: ;20FE jra * ; [20 FE] ; ******************************************************** ; boot_FLASH segment byte at 9FF2-9FFF 'boot_F' ;90AE4C0A90F6F7905A5A2AF85CFC boot_F_start: ; Y <- { boot_O_START + RAM_END} { $480B + $03FF = $4C0A } ldw Y, #$4C0A ; [90 AE 4C 0A] ; ; boot_FLASH, boot_OPTION boot_F_copy: ld A, (Y) ; [90 F6] ld (X), A ; [F7] decw Y ; [90 5A] decw X ; [5A] jrpl boot_F_copy ; [2A F8] X(Y) >= RAM_START(boot_O_START) incw X ; [5C] jp (X) ; [FC] end ;
рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкрддреЗ рдХреЛ $ 8004 ... $ 9FF1 рдХреА рд╕реАрдорд╛ рд╕реЗ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред EEPROM рдореЗрдореЛрд░реА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП, рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рдХреЗрд╡рд▓ $ 0000 рдХреЗ рдкрддреЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕рдВрднрд╡ рд╣реИред
рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рд╕реА рднреА рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рдкрддреЗ рдХреЛ рджреВрд╕рд░реА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд░реНрдХ рднреА рд╣реИрдВред
рдореИрдВ рдкрд╛рдардХреЛрдВ рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдЖрдЧреЗ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рд▓реЗрдЦ
"рдлреНрд▓реЙрдЯрд░ рдореЗрдореЛрд░реА рдореЗрдВ 8 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрд╕рдЯреАрдПрдо 8 рдХреЗ рд▓рд┐рдП рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░реЗрдВ" рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред