рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ 8 рдмрд╛рдЗрдЯреНрд╕ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП STM8 рдХреЗ рд▓рд┐рдП рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░реЗрдВ

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрди рдХреЗ рдмрд╛рдж рд╕реЗ, тАЬрдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ 18 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрд╕рдЯреАрдПрдо 8 рдмреВрдЯ рд▓реЛрдбрд░ рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдПтАЭ , рдПрд╕рдЯреАрдПрдо 8 рдПрд▓рдУрдПрд▓рдПрдбрд░ рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдИ рджрд┐рдП рд╣реИрдВ ред STM8uLoader рдмреВрдЯрд▓реЛрдбрд░ рд╕рдВрд╕реНрдХрд░рдг $ 36 рдиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдПрдХ рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ 18 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рд╛, рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдЯреНрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдЖрдХрд╛рд░ рдмрдврд╝рдХрд░ 53 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ (рдЗрд╕рдореЗрдВ рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╕реНрдерд╛рди рд▓рд┐рдпрд╛ рдЧрдпрд╛)ред

$ 0D рдмреВрдЯрд▓реЛрдбрд░ рдХреА рдПрдХ рдЕрд▓рдЧ рд╢рд╛рдЦрд╛ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рдереАред рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛрдб рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдирд╛ рд╣реИред рдЖрдЬ рддрдХ, FLASH рдореЗрдореЛрд░реА рдореЗрдВ рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ 35 рдмрд╛рдЗрдЯреНрд╕ рдХреА EEPROM рдореЗрдореЛрд░реА рдореЗрдВ 8 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред

рдореБрдЭреЗ STM8uLoader рдмреВрдЯрд▓реЛрдбрд░ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВред рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ boot_PC рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ STM8 рдореЗрдореЛрд░реА рдореЗрдВ boot_uC рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВред рдмрд╛рдж рдХреЛ рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд boot_FLASH рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЛрдб рдФрд░ EEPROM рдореЗрдореЛрд░реА (рдпрд╛ рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдЯреНрд╕ рдХреНрд╖реЗрддреНрд░) рдореЗрдВ рд╕реНрдерд┐рдд boot_EEPROM (рдпрд╛ boot_OPTION) рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

RESET рдИрд╡реЗрдВрдЯ рдХреЗ рдмрд╛рдж, boot_FLASH рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдкрд┐рдпрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, RAM рд╕реНрдореГрддрд┐ рдореЗрдВ boot_EEPROM (рдпрд╛ boot_OPTION) рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рдЫрд╡рд┐ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдмреВрдЯрд▓реЛрдбрд░ UART рдХреЛ рдЙрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд╣реЛрд╕реНрдЯ рдмрд╛рдЗрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рдпрд╣ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рджреМрд░рд╛рди рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдлрд╝реНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╛ EEPROM рдореЗрдореЛрд░реА (рдпрд╛ рдСрдкреНрд╢рди рдмрд╛рдЗрдЯреНрд╕ рдПрд░рд┐рдпрд╛) рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐, рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдЯ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ UART рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдбрдВрдк рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрд╡реАрдХреГрдд рдбрдВрдк рдЕрдкрдирд╛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ: STM8 рдХрд░реНрдиреЗрд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд / STM8 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкрдврд╝рдирд╛ / рдХреЙрдкреА / рдорд┐рдЯрд╛рдирд╛, рдмреВрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдбрдВрдк рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдкрд┐рдпрд░ рдмреВрдЯ_рдлреНрд▓реИрд╢ рд░реЗрд╡ред $ 0D $ 8000 рдХреЗ рдкрддреЗ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ ... $ 8007 рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ RESET рдФрд░ TRAP (рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЯрд░рдкреНрдЯ) рд╡реИрдХреНрдЯрд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИред рдмрд╛рдХреА рдХреА рдЬрдЧрд╣ $ 8008 ... $ 9FFF рдХреА FLASH рдореЗрдореЛрд░реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд▓рдн рд╣реИред рдмрд╛рдзрд┐рдд рд╡реЗрдХреНрдЯрд░ рдЯреЗрдмрд▓ рднреА рдЬрдЧрд╣ рдореЗрдВ рд╣реИред

рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

;   boot_FLASH  $0D($88) ;       $4087($4187) ;       $00 ;     segment byte at 8000-8007 'bootF_rev0D' ; $8000 RESET Reset vector dc.b $AE, $40 ; [AE 40 88] ldw X,#$4088 ; dc.b $AE, $41 ; [AE 41 88] ldw X,#$4188 cycle: ;      ;  push A   ldw X,#$4088($4188) push A ; [88] decw X ; [5A] ; $8004 TRAP Software interrupt ld A, (X) ; [F6] jrne cycle ; [26 FB] ret ; [81] ; $8008 TLI IRQ0 External top level interrupt 

рджреЛ рдХрдорд╛рдВрдбреНрд╕ рдХрд╛ рдХреЛрдб рдпрд╣рд╛рдБ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддрд╛ рд╣реИ: ldw X, # $ 4088 (ldw X, # $ 4188) рдХрдорд╛рдВрдб рдФрд░ рдкреБрд╢ Aред ред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдиреЗ рдПрдХ рдмрд╛рдЗрдЯ рдХреЛ рдмрдЪрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рдХреА рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рднрдВрдбрд╛рд░рдг рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрдХреАрд░реНрдг рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкрддреЗ рдХреЗ $ 88 рдХреЗ рдирд┐рдореНрди рдмрд╛рдЗрдЯ рдЗрд╕реЗ рд╡рд┐рдХрд▓реНрдк рдмрд╛рдЗрдЯреНрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред STM8S103F3 рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП EEPROM рдореЗрдореЛрд░реА рдореЗрдВ рдХреЗрд╡рд▓ $ 4088 рдФрд░ $ 4188 рдкрддреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред EEPROM рдореЗрдореЛрд░реА 128 рдмрд╛рдЗрдЯреНрд╕ ($ 4000 ... $ 407F) рдХреЗ рд╕рд╛рде STM8S003F3 рдХреЗ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдпреЗ рдкрддреЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдЙрдирдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдПрдХ рдЦрд╛рдореА рд╣реИред

рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреБрд╢ A рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ X рдХрдорд╛рдВрдб рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 ;   boot_FLASH  $0D($5A) ;       $405A($415A, $425A) ;       $00 ;     segment byte at 8000-8007 'bootF_rev0D' ; $8000 RESET Reset vector dc.b $AE, $40 ; [AE 40 5A] ldw X,#$405A  STM8S003F3 ; dc.b $AE, $41 ; [AE 41 5A] ldw X,#$415A ; dc.b $AE, $41 ; [AE 42 5A] ldw X,#$425A cycle: ;      ;  decw X   ldw X,#$405A($415A, $425A) decw X ; [5A] push A ; [88] ; $8004 TRAP Software interrupt ld A, (X) ; [F6] jrne cycle ; [26 FB] ret ; [81] ; $8008 TLI IRQ0 External top level interrupt 


рдпрд╣рд╛рдВ, рдЬрдм рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рд▓реВрдк рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ ldw X, # $ 405A ($ 415A, $ 425A) рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ decw X рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ RESET рдШрдЯрдирд╛ рдХреЗ рд╕рд╛рде, SP рд╕реНрдЯреИрдХ рдХрд╛ рд╢реАрд░реНрд╖ рд╕реВрдЪрдХ $ 03FF рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд╣рд╛рд░реНрдбрд╡реЗрдпрд░-рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╣реИред рд╕реНрдЯреЙрдХреНрд╕ рдШрдЯрддреЗ рдкрддреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдмрдврд╝ рд░рд╣рд╛ рд╣реИред рдкреВрдВрдЫ рд╕реЗ рд╕реНрдЯреИрдХ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯреЗрдмрд▓ рд╕реЗ рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рднреА рдкрдврд╝реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдбрд┐рдХреЙрдХ рдПрдХреНрд╕ рдХрдорд╛рдВрдбред EEPROM рдореЗрдореЛрд░реА рдореЗрдВ рдмреВрдЯ рд▓реЛрдбрд░ рдХреЛрдб рдХреА рдЫрд╡рд┐ рддрджрдиреБрд╕рд╛рд░ рд╕реНрдерд┐рдд рд╣реИред
рдкреИрд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓реВрдк рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рдереЗ рдХрд┐ рдмреВрдЯрд▓реЛрдбрд░ рдХреА рдХреЛрдб рдЫрд╡рд┐ рдореЗрдВ рдХреЗрд╡рд▓ рдЯреЗрдмрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рд╣реЛрдЧрд╛, рдФрд░ рд╣рдо рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдПрдбреНрд░реЗрд╕ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо (рдЬрд┐рд╕рдореЗрдВ рдЬреАрд░реЛ рдмрд╛рдЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХреЛ рдЯреЗрдмрд▓ рдХреЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдПрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рд╣рдо рдЯреЗрдмрд▓ рд╕реЗ рдмрд╛рдЗрдЯ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдпрд╣ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреНрдХрд╛ рджреЗрдВред рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рдкрдврд╝реЗрдВ - рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ред

рдпрд╣рд╛рдБ рд░рд┐рдЯ рдХрдорд╛рдВрдб рдХрд╛ рдорддрд▓рдм рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдирд┐рд╣рд┐рдд рдкрддреЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреИрдХ рдкрд░ рдЕрдВрддрд┐рдо рдерд╛ред рдЕрдм рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 ;   boot_EEPROM  $0D($88) segment byte at 4067-4089 'bootE_rev0D_88' ; segment byte at 417B-4189 'bootE_rev0D_88' ; $4067 terminator    RAM dc.b $00 ; [00] ; $4068 ($03E0) {RAM END - 31} ; {$0400 - (bootE_go_adr - bootE_start) } dc.w $03E2 ; [03 E2] $4067 - $3C85 = $03E2 ;  UART 96001N8 ;  BREAK    $0D bootE_start: ; $406A ($03E2) {RAM END - 29} ld A, #%00001101 ; [A6 0D] ld UART1_BRR1, A ; [C7 52 32] ld UART1_CR2, A ; [C7 52 35] ld UART1_DR, A ; [C7 52 31] ;     243  ;  n    ; $4075 ($03ED) {RAM END - 18} bootE_rx_byte: incw X ; [5C] jreq bootE_exit ; [27 0C] btjf UART1_SR, #5, bootE_rx_byte ; [72 0B 52 30 F8] push UART1_DR ; [3B 52 31] ; clrw X ; [5F] inc A ; [4C] jrne bootE_rx_byte ; [26 F2] ;     ;   $02F1 (     $FE $02) ret ; [81] ; $4084 ($03FC) {RAM END - 3} bootE_exit: jp [bootE_go_adr] ; [72 CC 40 88] RAM END ;      ; $4088    RAM bootE_go_adr: dc.w main_flash ; [80 08] 


рд╕реНрдЯреИрдХ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЗ рдкрддреЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдПрдХ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рд╣реИ; рдореЗрдореЛрд░реА рдореЗрдВ рд░реИрдо рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХрд╛ рдкрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рдЕрдЧрд▓реЗ рд╕реЗрд▓ рдХрд╛ рдкрддрд╛ рд╣реИред рдпрд╣ рдЬреЛрдбрд╝реА рд╕реНрдЯреИрдХ рдкрд░ рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕реЗ рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдЕрдЧрд▓реЗ рдбрдВрдк рдХреЗ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рдкрддреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЬреЛрдбрд╝реА рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдмрд╛рдж рдХреЗ рд╕рднреА рдХреЛрдб рдХреЛ рднреА рд╕реНрдЯреИрдХ рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЗрд╕рдХреЗ рдмрд╛рдж UART рдХрд╛ рдЖрд░рдВрдн рд╣реИред рдпрд╣рд╛рдВ рддреАрдиреЛрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдирдВрдмрд░ $ 0D рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ UART рдХреА рдЧрддрд┐ (16000000/8/9600/16 = 13) рд╣реИред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди / рд░рд┐рд╕реЗрдкреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдпрд╣рд╛рдВ рдПрдХ рд╕реНрдЯреАрдо рд▓реЛрдХреЛрдореЛрдЯрд┐рд╡ рдиреЗ BREAK рдЗрд╡реЗрдВрдЯ рдХреА рдПрдХ рдмрд╛рд░ рдХреА рдкреАрдврд╝реА рдХреЛ рдкрдХрдбрд╝рд╛ред рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд▓реЛрдбрд░ рдХреЗ рд╣реЛрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рднреЗрдЬ рд░рд╣рд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рджреЛ рдмрд╛рдЗрдЯреНрд╕ $ 00 (рдИрд╡реЗрдВрдЯ BREAK) рдФрд░ $ 0D (рдмреВрдЯрд▓реЛрдбрд░ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛) рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ - рдпрд╣ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдбрдВрдк рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

$ 0D рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде A рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдкреНрд░рд╛рдкреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рд╢реВрдиреНрдп рдХреА рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдЧрд┐рдирддрд╛ рд╣реИ, рдЬреЛ 243 рдкреНрд░рд╛рдкреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рдЗрд╕ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реИ рдХрд┐ рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдбрдВрдк рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдкреАрд┐рд╕реНрдЯ рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ X $ 4068 рддрдХ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдпрд╣ рд╢реВрдиреНрдп (49048 рдЕрднреА рднреА рд╢реЗрд╖) рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА, рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рд╕рдордп рдХреА рдЧрд┐рдирддреАред рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рдкрд╛рд╕ рдбрдВрдк рдХреЛ рдЖрдХрд╛рд░ рдореЗрдВ 243 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдЖрдЧреЗ рд░рдЦреЗрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рдирд┐рдпрдВрддреНрд░рдг рдЖрд╡реЗрджрди рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд░реАрд╕реЗрдЯ рдмрдЯрди рджрдмрд╛рдХрд░ рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдкреНрд░рд╛рдкреНрдд рдбрдВрдк рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рд╕реНрдЯреИрдХ рдкрд░ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд▓реЗрддрд╛ рд╣реИ рдЬрдм рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рд╕рд╛рде рдбрдВрдк рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рдкреНрдд рдбрдВрдк рдХреЛ $ 02ED ... $ 03DF рдХреЗ рдкрддреЗ рдкрд░ рд╕реНрдЯреИрдХ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдкрддрд╛ $ 02F0 рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрддрд╛ рд╣реИред рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб $ 03E0 ... $ 03FF рдХреЗ рдкрддреЗ рдкрд░ рд╕реНрдЯреИрдХ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рд╢реБрд░реВ рдореЗрдВ рдпрд╣ рдкрддреЗ рдкрд░ $ 03E0 рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдбрдВрдк рдХреЛ рдкрддреЗ рдкрд░ $ 03E8 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрдорд╛рдВрдб $ 03FB рдкрд░ рд╕реНрдЯреИрдХ рдкрд░ рд╣реИред
рд╡рд░реНрддрдорд╛рди рдбрдВрдк рджреНрд╡рд╛рд░рд╛ рдкрддрд╛ $ 03FF рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

STM8 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдкрд┐рдпрд░ рдФрд░ рдмреВрдЯрд▓реЛрдбрд░ рдХрд╛ рдкреВрд░рд╛ рд╕реНрд░реЛрдд рдХреЛрдб $ 4039 рдореЗрдВ EEPROM рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдЯреЗрдмрд▓ рдХреЗ рд╕рд╛рде $ 0D ... $ 405C ($ 4139 ... $ 415C, $ 4239 ... $ 2525C)ред

рдлрд╝рд╛рдЗрд▓ bootF_rev0D_5A.asm:
 stm8/ TITLE тАЬbootF_rev0D_5A.asmтАЭ MOTOROLA WORDS .NOLIST ; #include "STM8S003F.inc" #include "STM8S103F.inc" .LIST ;   boot_EEPROM  $0D($5A) segment byte at 4039-405C 'bootE_rev0D_405A' ; STM8S003F ; segment byte at 4139-415C 'bootE_rev0D_415A' ; segment byte at 4239-425C 'bootE_rev0D_425A' ; $403A9 ($03DD) {RAM END - 34} terminator   RAM ????? dc.b $00 ; [00] ; $403A ($03DE) {RAM END - 33} ; {$0400 - (bootE_go_adr - bootE_start - 1) } dc.w $03E0 ; [03 E0] ;  UART 96001N8 ;  BREAK    $0D bootE_start: ; $403C ($03E0) {RAM END - 31} ld A, #%00001101 ; [A6 0D] ld UART1_BRR1, A ; [C7 52 32] ld UART1_CR2, A ; [C7 52 35] ; $4044 ($03E8) {RAM END - 23} ld UART1_DR, A ; [C7 52 31] ;    243  ;  n    ; $40487 ($03EB) {RAM END - 20} bootE_rx_byte: incw X ; [5C] jreq bootE_exit ; [27 0C] btjf UART1_SR, #5, bootE_rx_byte ; [72 0B 52 30 F8] push UART1_DR ; [3B 52 31] clrw X ; [5F] inc A ; [4C] jrne bootE_rx_byte ; [26 F2] ;     ;   $02EF (     $EF $02) ; $4056 ($03FA) {RAM END - 5} ret ; [81] ; $4057 ($03FB) {RAM END - 4} bootE_exit: jp [bootE_go_adr] ; [72 CC 40 5B] {RAM END - 1} ; ($03FF) RAM END     ;      ; $405B    RAM bootE_go_adr: dc.w main_flash ; [80 08] ;   boot_FLASH  $0D($5A) ;       $405A($415A,$425A) ;       $00 ;     segment byte at 8000-8007 'bootF_rev0D' ; $8000 RESET Reset vector dc.b $AE, $40 ; [AE 40 5A] ldw X,#$405A ; STM8S003F ; dc.b $AE, $41 ; [AE 41 5A] ldw X,#$415A ; dc.b $AE, $42 ; [AE 42 5A] ldw X,#$425A cycle: ;      ;  dec X   ldw X,#$405A($415A,$425A) decw X ; [5A] push A ; [88] ; $8004 TRAP Software interrupt ld A, (X) ; [F6] jrne cycle ; [26 FB] ret ; [81] ; $8008 TLI IRQ0 External top level interrupt ;   segment byte at 8008 'main_flash' main_flash: jra * ; [20 FE] ; end ; bootF_rev0D_5A.asm 



рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдкреАрд╕реНрдЯрд╛рд░ рдФрд░ рдмреВрдЯрд▓реЛрдбрд░ рдХрд╛ рдкреВрд░рд╛ рд╕реНрд░реЛрдд рдХреЛрдб STM8 рд╕рдВрд╕реНрдХрд░рдг $ 0D рдореЗрдВ EEPROM рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдЯреЗрдмрд▓ рдХреЗ рд╕рд╛рде $ 4065 ... $ 4088 ($ 4165 ... $ 4188) рд╣реИред

рдлрд╝рд╛рдЗрд▓ bootF_rev0D_88.asm:
 stm8/ TITLE тАЬbootF_rev0D_88.asmтАЭ MOTOROLA WORDS .NOLIST ; #include "STM8S003F.inc" #include "STM8S103F.inc" .LIST ;   boot_EEPROM  $0D($88) segment byte at 4065-4088 'bootE_rev0D_88' ; segment byte at 4165-4188 'bootE_rev0D_88' ; $4065 terminator    RAM dc.b $00 ; [00] ; $4066 ($03DE) {RAM END - 33} ; {$0400 - (bootE_go_adr - bootE_start) } dc.w $03E0 ; [03 E0] ;  UART 9600 1N8 ;  BREAK    $0D bootE_start: ; $4068 ($03E0) {RAM END - 31} ld A, #%00001101 ; [A6 0D] ld UART1_BRR1, A ; [C7 52 32] ld UART1_CR2, A ; [C7 52 35] ; $4070 ($03E8) {RAM END - 23} ld UART1_DR, A ; [C7 52 31] ;    243  ;  n    ; $4073 ($03EB) {RAM END - 20} bootE_rx_byte: incw X ; [5C] jreq bootE_exit ; [27 0C] btjf UART1_SR, #5, bootE_rx_byte ; [72 0B 52 30 F8] push UART1_DR ; [3B 52 31] clrw X ; [5F] inc A ; [4C] jrne bootE_rx_byte ; [26 F2] ;     ;   $02EF (     $EF $02) ; $4082 ($03FA) {RAM END - 5} ret ; [81] ; $4083 ($03FB) {RAM END - 4} bootE_exit: jp [bootE_go_adr] ; [72 CC 40 87] {RAM END - 1} ; ($03FF) RAM END     ;      ; $4087 ($4088 )   RAM bootE_go_adr: dc.w main_flash ; [80 08] ;   boot_FLASH  $0D($88) ;       $4087($4187) ;       $00 ;     segment byte at 8000-8007 'bootF_rev0D' ; $8000 RESET Reset vector dc.b $AE, $40 ; [AE 40] ldw X,#$4088 ; dc.b $AE, $41 ; [AE 41] ldw X,#$4188 cycle: ;      ;  push A   ldw X,#$4088($4188) push A ; [88] decw X ; [5A] ; $8004 TRAP Software interrupt ld A, (X) ; [F6] jrne cycle ; [26 FB] ret ; [81] ; $8008 TLI IRQ0 External top level interrupt ;   segment byte at 8008 'main_flash' main_flash: jra * ; [20 FE] end ; bootF_rev0D_88.asm 



рд╣рдо STM8 рдХреА рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдлрд╝рд╛рдЗрд▓ main_rev0D.asm:
 stm8/ TITLE тАЬmain_rev0D.asmтАЭ MOTOROLA WORDS .NOLIST #include "STM8S103F.inc" .LIST ;   segment byte at 8008-9FFF 'main_flash' main_flash: main_cycle: ;   bset PB_DDR,#5 ; bset PB_CR1,#5 ; callr flash_delay ;   bres PB_DDR,#5 ; bres PB_CR1,#5 ; callr flash_delay jra main_cycle flash_delay: ldw X, #35000 flash_delay_cycle: decw X jrne flash_delay_cycle ret end ; main_rev0D.asm 



STM8 рдореЗрдВ рд╕реАрд╡рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмреВрдЯрд▓реЛрдбрд░ред рд╣рдо рдмреЛрд░реНрдб рдХреЛ USB-TTL рдПрдбрд╛рдкреНрдЯрд░ (UART) рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ runSTM8uLoader.bat рдЪрд▓рд╛рдПрдБред рдмреЛрд░реНрдб рдкрд░ рд░реАрд╕реЗрдЯ рдмрдЯрди рджрдмрд╛рдПрдВред рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ:



рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдлреНрд▓реИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбрд┐рд╡рд╛рдЗрд╕ рд░рд┐рдмреВрдЯ рдХрд░рддрд╛ рд╣реИред рдПрд▓рдИрдбреА рдЭрдкрдХрдиреЗ рд▓рдЧрддреА рд╣реИред

рдбрдВрдк рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд░реИрдо рдореЗрдореЛрд░реА рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд▓реЛрдбрд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ:

рдлрд╝рд╛рдЗрд▓ Read_128000v0D.asm:
 stm8/ TITLE "Read_128000v0D.asm" MOTOROLA WORDS .NOLIST #include "STM8S103F3P.inc" .LIST ;     243  ;        $02EE...$03DF ; (  $03DF:$03E0      ) ;     $02F0 ;        $03E1...$03FE ;        $03E1 (   9600,  A<=$0D SP<=$03E0 X<=$0000) ;    $03E9 (  ,  A<=$0D SP<=$03E8 X<=$0000) ;       $03FB segment byte at 0000-00F2 'ram0' dc.w $02F0 start: ;  UART1  /   9600,     (8 ,   , 1  ) mov UART1_BRR2, #0 ; [35 00 52 33]  Fmaster=16/8=2  128000 mov UART1_BRR1, #1 ; [35 0D 52 32]  Fmaster=16/8=2  128000 mov UART1_CR2, #%00001100 ; [35 0C 52 35] UART1_CR2.TEN <- 1 UART1_CR2.REN <- 1  / main_cycle: wait_byte_adrH_cmnd: btjf UART1_SR, #5, wait_byte_adrH_cmnd ld A, UART1_DR cp A, #$EF JRUGT wait_byte_cmd_test ; Relative jump if Unsigned Greater Than ld XH, A ;     XH ld UART1_DR, A ;     tx_echo_adrH: btjf UART1_SR, #7, tx_echo_adrH ; skip if UART1_SR.TXE = 0 TXE: Transmit data register empty wait_byte_adrL: btjf UART1_SR, #5, wait_byte_adrL ld A, UART1_DR ld XL, A ;     XL wait_byte_cntr: btjf UART1_SR, #5, wait_byte_cntr ld A, #$00 ld YH, A ; ld A, UART1_DR ld YL, A ;  ;   bset PB_DDR,#5 ; bset PB_CR1,#5 ; ; read_block_cycle: ld A, (X) ld UART1_DR, A wait_tx: btjf UART1_SR, #7, wait_tx ; skip if UART1_SR.TXE = 0 TXE: Transmit data register empty incw X decw Y jrne read_block_cycle ;   bres PB_DDR,#5 ; bres PB_CR1,#5 ; jra main_cycle ;    $F0   wait_byte_cmd_test: cp A, #$F5 ;   jreq echo_F5cmd wait_tx_err: mov UART1_DR, #$F1 ;   btjf UART1_SR, #7, wait_tx_err ; skip if UART1_SR.TXE = 0 TXE: Transmit data register empty jra main_cycle echo_F5cmd: ld UART1_DR, A ;    wait_tx_echo_F5cmd: btjf UART1_SR, #7, wait_tx_echo_F5cmd ; skip if UART1_SR.TXE = 0 TXE: Transmit data register empty ; GoAdr wait_byte_adrH_toM; btjf UART1_SR, #5, wait_byte_adrH_toM mov $03E7, UART1_DR wait_byte_adrL_toM; btjf UART1_SR, #5, wait_byte_adrL_toM mov $03E8, UART1_DR ; SP wait_byte_adrH_toSP; btjf UART1_SR, #5, wait_byte_adrH_toSP ld A, UART1_DR ld XH, A wait_byte_adrL_toSP; btjf UART1_SR, #5, wait_byte_adrL_toSP ld A, UART1_DR ld XL, A ldw SP, X ; Y wait_byte_adrH_toY; ; btjf UART1_SR, #5, wait_byte_adrH_toY ; ld A, UART1_DR ; ld YH, A wait_byte_adrL_toY; ; btjf UART1_SR, #5, wait_byte_adrL_toY ; ld A, UART1_DR ; ld YL, A ; X wait_byte_adrH_toX; btjf UART1_SR, #5, wait_byte_adrH_toX ld A, UART1_DR ld XH, A wait_byte_adrL_toX; btjf UART1_SR, #5, wait_byte_adrL_toX ld A, UART1_DR ld XL, A ; A wait_byte_cntr_toA; btjf UART1_SR, #5, wait_byte_cntr_toA ld A, UART1_DR jp [$03E7.w] SKIP 59, $00 ;     dc.b $00 dc.b $00 end ; Read_128000v0D.asm 



рдлрд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВрдмреНрд▓реЙрдХ_рдлреНрд▓реИрд╢_128000v0D.asm:
 stm8/ TITLE "WriteBlocks_FLASH_128000v0D.asm" MOTOROLA WORDS .NOLIST #include "STM8S103F3P.inc" .LIST ;     243  ;        $02EE...$03DF ; (  $03DF:$03E0      ) ;     $02F0 ;        $03E1...$03FE ;        $03E1 (   9600,  A<=$0D SP<=$03E0 X<=$0000) ;    $03E9 (  ,  A<=$0D SP<=$03E8 X<=$0000) ;       $03FB segment byte at 0000-00F2 'ram0' dc.w $02F0 start: ;  UART1  /   9600,     (8 ,   , 1  ) mov UART1_BRR2, #0 ; [35 00 52 33]  Fmaster=16/8=2  128000 mov UART1_BRR1, #1 ; [35 0D 52 32]  Fmaster=16/8=2  128000 mov UART1_CR2, #%00001100 ; [35 0C 52 35] UART1_CR2.TEN <- 1 UART1_CR2.REN <- 1  / main_cycle: wait_byte_adrH_cmnd: btjf UART1_SR, #5, wait_byte_adrH_cmnd ld A, UART1_DR cp A, #$F0 JRUGE wait_byte_cmd_test ; Relative jump if Unsigned Greater or Equal ld XH, A ;     XH ld UART1_DR, A ;     tx_echo_adrH: btjf UART1_SR, #7, tx_echo_adrH ; skip if UART1_SR.TXE = 0 TXE: Transmit data register empty wait_byte_adrL: btjf UART1_SR, #5, wait_byte_adrL ld A, UART1_DR ld XL, A ;     XL wait_byte_cntr: btjf UART1_SR, #5, wait_byte_cntr ;   mov $03FF, UART1_DR write_block_cycle: ldw Y, #64 ;   ; unlock FLASH memory (writing the correct MASS keys) mov FLASH_PUKR, #$56 ; Write $56 then $AE in FLASH_PUKR($5062) mov FLASH_PUKR, #$AE ; If wrong keys have been entered, another key programming sequence can be issued without resetting the device. ; FLASH Block programming mode       mov FLASH_CR2, #$01 mov FLASH_NCR2, #$FE ; ; FLASH Word programming mode       ; mov FLASH_CR2, #$40 ; mov FLASH_NCR2, #$BF ; else FLASH byte programming ;   bset PB_DDR,#5 ; bset PB_CR1,#5 ; ;        ;          wait_rx_byte: btjf UART1_SR, #5, wait_rx_byte ld A, UART1_DR ld (X), A incw X decw Y jrne wait_rx_byte mov UART1_DR, #$FA ; OK wait_tx_OK_FA: btjf UART1_SR, #7, wait_tx_OK_FA ; skip if UART1_SR.TXE = 0 TXE: Transmit data register empty ;   bres PB_DDR,#5 ; bres PB_CR1,#5 ; dec $03FF jrne write_block_cycle jra main_cycle ;    $F0   wait_byte_cmd_test: cp A, #$F5 ;    boot_OPTION jreq echo_F5cmd wait_tx_err: mov UART1_DR, #$F1 ;   wait_tx_err_F1: btjf UART1_SR, #7, wait_tx_err_F1 ; skip if UART1_SR.TXE = 0 TXE: Transmit data register empty jra main_cycle echo_F5cmd: ld UART1_DR, A ;     boot_OPTION wait_tx_echo_F5cmd: btjf UART1_SR, #7, wait_tx_echo_F5cmd ; skip if UART1_SR.TXE = 0 TXE: Transmit data register empty ; GoAdr wait_byte_adrH_toM; btjf UART1_SR, #5, wait_byte_adrH_toM mov $03E7, UART1_DR wait_byte_adrL_toM; btjf UART1_SR, #5, wait_byte_adrL_toM mov $03E8, UART1_DR ; SP wait_byte_adrH_toSP; btjf UART1_SR, #5, wait_byte_adrH_toSP ld A, UART1_DR ld XH, A wait_byte_adrL_toSP; btjf UART1_SR, #5, wait_byte_adrL_toSP ld A, UART1_DR ld XL, A ldw SP, X ; Y wait_byte_adrH_toY; ; btjf UART1_SR, #5, wait_byte_adrH_toY ; ld A, UART1_DR ; ld YH, A wait_byte_adrL_toY; ; btjf UART1_SR, #5, wait_byte_adrL_toY ; ld A, UART1_DR ; ld YL, A ; X wait_byte_adrH_toX; btjf UART1_SR, #5, wait_byte_adrH_toX ld A, UART1_DR ld XH, A wait_byte_adrL_toX; btjf UART1_SR, #5, wait_byte_adrL_toX ld A, UART1_DR ld XL, A ; A wait_byte_cntr_toA; btjf UART1_SR, #5, wait_byte_cntr_toA ld A, UART1_DR jp [$03E7.w] SKIP 28, $00 ;     dc.b $00 dc.b $00 end ; WriteBlocks_FLASH_128000v0D.asm 



рдлрд╝рд╛рдЗрд▓ Reset_128000v0D.asm:
 stm8/ TITLE "Reset_128000v0D.asm" MOTOROLA WORDS .NOLIST #include "STM8S103F3P.inc" .LIST ;     243  ;        $02EE...$03DF ; (  $03DF:$03E0      ) ;     $02F0 ;        $03E1...$03FE ;        $03E1 (   9600,  A<=$0D SP<=$03E0 X<=$0000) ;    $03E9 (  ,  A<=$0D SP<=$03E8 X<=$0000) ;       $03FB segment byte at 0000-00F2 'ram0' dc.w $02F0 start: ;        RESET ldw X, #$03FF ldw SP, X clrw X clrw Y clr A jp $8000 SKIP 230, $00 end ; Reset_128000v0D.asm 



рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ, рдпреЗ рд╕рдорд╛рди рдбрдВрдк рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ:

  public readonly static byte[] Read_128000v0D = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x03, 0xCC, 0x72, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x97, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x95, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x94, 0x97, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x95, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0xE8, 0x03, 0x31, 0x52, 0x55, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0xE7, 0x03, 0x31, 0x52, 0x55, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0xFB, 0x30, 0x52, 0x0F, 0x72, 0x31, 0x52, 0xC7, 0xA5, 0x20, 0xF7, 0x30, 0x52, 0x0F, 0x72, 0x31, 0x52, 0xF1, 0x35, 0x0B, 0x27, 0xF5, 0xA1, 0xB4, 0x20, 0x08, 0x50, 0x1B, 0x72, 0x07, 0x50, 0x1B, 0x72, 0xF2, 0x26, 0x5A, 0x90, 0x5C, 0xFB, 0x30, 0x52, 0x0F, 0x72, 0x31, 0x52, 0xC7, 0xF6, 0x08, 0x50, 0x1A, 0x72, 0x07, 0x50, 0x1A, 0x72, 0x97, 0x90, 0x31, 0x52, 0xC6, 0x95, 0x90, 0x00, 0xA6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x97, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0xFB, 0x30, 0x52, 0x0F, 0x72, 0x31, 0x52, 0xC7, 0x95, 0x40, 0x22, 0xEF, 0xA1, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x35, 0x52, 0x0C, 0x35, 0x32, 0x52, 0x01, 0x35, 0x33, 0x52, 0x00, 0x35, 0xF0, 0x02 }; 

  public readonly static byte[] WriteBlocks_FLASH_128000v0D = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x03, 0xCC, 0x72, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x97, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x95, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x94, 0x97, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x95, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0xE8, 0x03, 0x31, 0x52, 0x55, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0xE7, 0x03, 0x31, 0x52, 0x55, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0xFB, 0x30, 0x52, 0x0F, 0x72, 0x31, 0x52, 0xC7, 0x86, 0x20, 0xFB, 0x30, 0x52, 0x0F, 0x72, 0x31, 0x52, 0xF1, 0x35, 0x0B, 0x27, 0xF5, 0xA1, 0x95, 0x20, 0xBF, 0x26, 0xFF, 0x03, 0x5A, 0x72, 0x08, 0x50, 0x1B, 0x72, 0x07, 0x50, 0x1B, 0x72, 0xFB, 0x30, 0x52, 0x0F, 0x72, 0x31, 0x52, 0xFA, 0x35, 0xF2, 0x26, 0x5A, 0x90, 0x5C, 0xF7, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x08, 0x50, 0x1A, 0x72, 0x07, 0x50, 0x1A, 0x72, 0x5C, 0x50, 0xFE, 0x35, 0x5B, 0x50, 0x01, 0x35, 0x62, 0x50, 0xAE, 0x35, 0x62, 0x50, 0x56, 0x35, 0x40, 0x00, 0xAE, 0x90, 0xFF, 0x03, 0x31, 0x52, 0x55, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x97, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0xFB, 0x30, 0x52, 0x0F, 0x72, 0x31, 0x52, 0xC7, 0x95, 0x5F, 0x24, 0xF0, 0xA1, 0x31, 0x52, 0xC6, 0xFB, 0x30, 0x52, 0x0B, 0x72, 0x35, 0x52, 0x0C, 0x35, 0x32, 0x52, 0x01, 0x35, 0x33, 0x52, 0x00, 0x35, 0xF0, 0x02 }; 

  public readonly static byte[] Reset_128000v0D = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xCC, 0x4F, 0x5F, 0x90, 0x5F, 0x94, 0xFF, 0x03, 0xAE, 0xF0, 0x02 }; 


рдкрд┐рдЫрд▓рд╛ рд▓реЗрдЦ: "рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ 18 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЖрдХрд╛рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдЯреАрдПрдо 8 рдХреЗ рд▓рд┐рдП рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░реЗрдВ ред "
рд╡реЗрдмрд╕рд╛рдЗрдЯ http://nflic.ru/STM8/STM8uLoader/000.html рдХреЗ рд╕рд╛рде ред
Https://sourceforge.net/projects/ovsp рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ ред
Https://github.com/ovsp/STM8uLoader рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ ред

рдореИрдВ рдкрд╛рдардХреЛрдВ рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдЖрдЧреЗ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред

Source: https://habr.com/ru/post/hi418483/


All Articles