<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: DZ60 - Problem flashing some adresses in 8-bit Microcontrollers</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196640#M15735</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Page size is not 768 bytes? You must be wrong.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I see at least one problem in your code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;      ldhx    ADRS    ;get flash address      sta    0,x    ;write to flash; latch addr and data      aix    #1      sthx   ADRS            lda   #mBurstProg ;load A with burst program command            sta   FCMD         ;store burst program command to FCMD            lda   #mFSTAT_FCBEF ;launch command            sta FSTAT   ;4 bus cycle   nop   nop   nop   nop===&amp;gt; HX doesn't point to FSTAT!            lda   ,x          ;check error flags in FSTAT            and   #(mFSTAT_FPVIOL|mFSTAT_FACCERR) ;reserve FSTAT[PVIOL,ACCERR]&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 05 Apr 2011 00:17:52 GMT</pubDate>
    <dc:creator>kef</dc:creator>
    <dc:date>2011-04-05T00:17:52Z</dc:date>
    <item>
      <title>DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196639#M15734</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, I am currently porting my bootloader to the MC9S08D60.&lt;/P&gt;&lt;P&gt;I've been using this bootloader on 9S08AW60, 9S08AC60, 9S08AC96.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So I wasn't expecting what happend....&lt;/P&gt;&lt;P&gt;I have changed the page size from 512 to 768 bytes (datasheet), I also have noticed that the erased page is not a multiple of 768 (experiment), and that burst programming works only for 32 consecutive bytes, starting at a multiple of 32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is a list&amp;nbsp; of related topics I found :&lt;/P&gt;&lt;P&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fcommunity.freescale.com%2Fthread%2F37776" rel="nofollow noopener noreferrer" target="_blank"&gt;S08 Flash question programming, strange results&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fcommunity.freescale.com%2Fmessage%2F33624%2333624" rel="nofollow noopener noreferrer" target="_blank"&gt;https://community.freescale.com/message/33624#33624&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is what happends :&lt;/P&gt;&lt;P&gt;After blanking my page, I start programming is, say 32 bytes per 32.&lt;/P&gt;&lt;P&gt;During the first 256 bytes, all bytes are written.&lt;/P&gt;&lt;P&gt;From 256 to 511, I can flash the first byte, and get an access error when attempting to write the next byte.&lt;/P&gt;&lt;P&gt;From 512 to 767, all bytes are written again&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thats the same is I proceed 256 per 256 bytes, or 8 per 8 bytes.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You will find attached two S19, before and after flashing. The files should be the same (I suggest the use kdiff3 or winmerge to ease comparison).&lt;/P&gt;&lt;P&gt;The area to be programmed is 0x3100..0x33FF, here is a snapshot of the borders :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;S123 31E0 EB37EAFCEABFEA81EA41E9FFE9BCE977E931E8E8E89DE84FE7FEE7ABE754E6FA5F&lt;BR /&gt;S123 3200 E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;S123 32E0 04FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5&lt;BR /&gt;S123 3300 049B049A0499049904980498049704970496049504950494049404930493049204&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is the assembly routine that I use. I think I found it some where around this forum :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;ProgSub:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; #(mFSTAT_FPVIOL|mFSTAT_FACCERR) ;clear FSTAT[PVIOL,ACCERR]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldhx&amp;nbsp; #FCNFG&amp;nbsp; ;load address of FCNFG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp;&amp;nbsp; 2,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;double-write FSTAT ensures FSTAT[PVIOL,ACCERR] are cleared&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp;&amp;nbsp; 2,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clr&amp;nbsp;&amp;nbsp; ,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;write $00 to FCNFG to clear FCNFG[KEYACC]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clra&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;clear return code&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; psha&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;save to stack, used as return code and operation resultcheckSize:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; #1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;set the stop function flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldhx&amp;nbsp; LEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;check if size is zero&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp; waitFCCF&amp;nbsp;&amp;nbsp;&amp;nbsp; ;if zero, wait FCCF set and terminate function&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aix&amp;nbsp;&amp;nbsp; #-1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;sub size by 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sthx&amp;nbsp; LEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pula&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;remove previous operation result and ignore AwaitFCBEF:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; FSTAT&amp;nbsp;&amp;nbsp; ;check if FSTAT[FCBEF] is high&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bpl&amp;nbsp;&amp;nbsp; waitFCBEF&amp;nbsp;&amp;nbsp; ;new command can only be start if FSTAT[FCBEF] is high&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldhx&amp;nbsp;&amp;nbsp; ADRR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aix&amp;nbsp;&amp;nbsp;&amp;nbsp; #1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sthx&amp;nbsp;&amp;nbsp; ADRR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldhx&amp;nbsp;&amp;nbsp;&amp;nbsp; ADRS&amp;nbsp;&amp;nbsp;&amp;nbsp; ;get flash address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,x&amp;nbsp;&amp;nbsp;&amp;nbsp; ;write to flash; latch addr and data&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aix&amp;nbsp;&amp;nbsp;&amp;nbsp; #1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sthx&amp;nbsp;&amp;nbsp; ADRS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; #mBurstProg ;load A with burst program command&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp;&amp;nbsp; FCMD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;store burst program command to FCMD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; #mFSTAT_FCBEF ;launch command&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta FSTAT&amp;nbsp;&amp;nbsp; ;4 bus cycle&amp;nbsp;&amp;nbsp; nop&amp;nbsp;&amp;nbsp; nop&amp;nbsp;&amp;nbsp; nop&amp;nbsp;&amp;nbsp; nop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; ,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;check error flags in FSTAT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&amp;nbsp;&amp;nbsp; #(mFSTAT_FPVIOL|mFSTAT_FACCERR) ;reserve FSTAT[PVIOL,ACCERR]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; psha&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;return code and operation result in A; save to stack&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp; checkPAGEEND ;do the next program sequence if success&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp;&amp;nbsp; ,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;clear FSTAT[PVIOL,ACCERR]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp; waitFCCF&amp;nbsp;&amp;nbsp;&amp;nbsp; ;non zero in A will stop function after FSTAT[FCCF] setcheckPAGEEND:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;need to wait FSTAT[FCCF] set at page boundary&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tsx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; 9,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;high byte of dest&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asra&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;lowest bit saved in carry bit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bcs&amp;nbsp;&amp;nbsp; checkSize&amp;nbsp;&amp;nbsp; ;not a page start if carry bit is set&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; 10,x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;low byte of dest&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bne&amp;nbsp;&amp;nbsp; checkSize&amp;nbsp;&amp;nbsp; ;not a page start if low byte is non zero,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Zero in A. function continue after FSTAT[FCCF] setwaitFCCF:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; psha&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;save stop flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldx&amp;nbsp;&amp;nbsp; FSTAT&amp;nbsp;&amp;nbsp; ;check if FSTAT[FCCF] is high&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aslx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;commands are finished if FSTAT[FCCF] is high&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pula&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;retrieve stop flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bpl&amp;nbsp;&amp;nbsp; waitFCCF&amp;nbsp;&amp;nbsp;&amp;nbsp; ;wait until FSTAT[FCCF] is high&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tsta&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;check if stop function&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq&amp;nbsp;&amp;nbsp; checkSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pula&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;retrieve return code from stack&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldhx STACK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rtsProgSubEnd:ProgSubSize: equ (*-ProgSub)&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried to add some more nop after starting programming, without succes.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can Anyone help me to fix the problem ?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Pierre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 04 Apr 2011 22:36:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196639#M15734</guid>
      <dc:creator>PierreAFD</dc:creator>
      <dc:date>2011-04-04T22:36:01Z</dc:date>
    </item>
    <item>
      <title>Re: DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196640#M15735</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Page size is not 768 bytes? You must be wrong.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I see at least one problem in your code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;      ldhx    ADRS    ;get flash address      sta    0,x    ;write to flash; latch addr and data      aix    #1      sthx   ADRS            lda   #mBurstProg ;load A with burst program command            sta   FCMD         ;store burst program command to FCMD            lda   #mFSTAT_FCBEF ;launch command            sta FSTAT   ;4 bus cycle   nop   nop   nop   nop===&amp;gt; HX doesn't point to FSTAT!            lda   ,x          ;check error flags in FSTAT            and   #(mFSTAT_FPVIOL|mFSTAT_FACCERR) ;reserve FSTAT[PVIOL,ACCERR]&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Apr 2011 00:17:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196640#M15735</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2011-04-05T00:17:52Z</dc:date>
    </item>
    <item>
      <title>Re: DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196641#M15736</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Kef,&lt;/P&gt;&lt;P&gt;The 'DZ60, and related&amp;nbsp;devices are different from most other HCS08 devices in that the flash sector size has been increased to 768 bytes.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Pierre,&lt;/P&gt;&lt;P&gt;I assume that you are actually using the "doonstack' method, with the data pre-loaded to the stack, followed by the ProgSub code.&amp;nbsp; But the stack usage for the data is not immediately evident from&amp;nbsp;your code snippet.&amp;nbsp; Have you checked that the data being read is correct, and there is not a data&amp;nbsp;indexing problem?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Keep in mind that, with the 'DZ60 there is an alternative approach, that would provide simpler code.&amp;nbsp; This is to place the ProgSub code permanently into EEPROM, and run the code from there.&amp;nbsp; EEPROM is a separate array from flash for this device, so is accessible during flash programming.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Also consider that, if you are erasing the non-volatile data&amp;nbsp;sector immediately prior to the programming process, there is usually little justification to use burst programming mode, as the sector erase period will&amp;nbsp;exceed the programming&amp;nbsp;period for the data.&amp;nbsp; Byte-by-byte programming will occupy a marginally longer period, but should give somewhat simpler and much more straightforward code.&amp;nbsp; Burst programming is really only of value for time critical applications, where the sector has already been erased.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Some general comments about your code:&lt;/P&gt;&lt;P&gt;I would see little point in writing to FCNFG register, as you are not dealing with the backdoor key.&amp;nbsp; Indexing to this register has apparently caused some indexing errors later in the code.&amp;nbsp; I assume that the original code on which you based your code actually indexed to FSTAT.&amp;nbsp; I do not know why you would need to double write to FSTAT.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Apr 2011 13:00:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196641#M15736</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2011-04-05T13:00:56Z</dc:date>
    </item>
    <item>
      <title>Re: DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196642#M15737</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Mac,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm using S08DZ and am sure sector/page size is 768. I disagree with Pierre's comment:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&amp;nbsp;I also have noticed that the erased page is &lt;FONT color="#ff0000"&gt;&lt;STRONG&gt;not&lt;/STRONG&gt;&lt;/FONT&gt; a multiple of 768 (experiment),&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Apr 2011 13:42:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196642#M15737</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2011-04-05T13:42:47Z</dc:date>
    </item>
    <item>
      <title>Re: DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196643#M15738</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Kef,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Sorry, I misinterpreted your&amp;nbsp;previous&amp;nbsp;comment.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Apr 2011 14:04:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196643#M15738</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2011-04-05T14:04:35Z</dc:date>
    </item>
    <item>
      <title>Re: DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196644#M15739</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, I use a 768 byte page, but I made a mistake in my sentence.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What I wanted to say is :&lt;/P&gt;&lt;P&gt;"The starting adress of the erased page is not at a multiple of 768 bytes"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Considering these points, it comes to something logic :&lt;/P&gt;&lt;P&gt;- The flash starting adress is 0x1900, which is not a multiple of 768 bytes.&lt;/P&gt;&lt;P&gt;- In my example, when I set the erase adress to 0x3300 (which is a multiple of 768), the bytes effectively erased are from 0x3100 (which is a not multiple of 768) to 0x33FF.&lt;/P&gt;&lt;P&gt;I think this is due to the flash protection mechanism which still work on multiples of 512 bytes, if you look at the first protected bytes in the datasheet (cf datasheet table 4.14 page 65 ).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your suggestion about HX not pointing to fstat, I must have a look !&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Pierre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Apr 2011 14:42:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196644#M15739</guid>
      <dc:creator>PierreAFD</dc:creator>
      <dc:date>2011-04-05T14:42:28Z</dc:date>
    </item>
    <item>
      <title>Re: DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196645#M15740</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;bigmac :&lt;/P&gt;&lt;P&gt;You are right : I use the "doonstack" method. But as far as I can remember, I didn't change a byte from the code I got, except the code section and a macro name. I join the full source file to this post.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have checked that the pointers are correct, their values are ok, and so the pointed data.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am about to place the code in the eeprom to ease debuging, but think in the end I will still have to use the flash code from ram since I want to keep the eeprom dedicated to the application.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What you say about burst/non burst programming is intersting, I didn't consider that point : I just wanted the fastest possible code !&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;kef also pointed some issues about fstat, I'll check that, and compare my code to the one provided in the bootloader application sample.&lt;/P&gt;&lt;P&gt;The double write to fstat was already there.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Also, is it realy necessary to program 32 bytes per 32 bytes ?&amp;nbsp; I tested with 256 bytes, and it was ok, for the 256 first and last bytes only.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your help so far&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Pierre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Apr 2011 15:13:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196645#M15740</guid>
      <dc:creator>PierreAFD</dc:creator>
      <dc:date>2011-04-05T15:13:46Z</dc:date>
    </item>
    <item>
      <title>Re: DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196646#M15741</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Pierre,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Yes, 64k address space is not divisible by 0x300 (768). Since vectors are in top most addresses and flash has to be there, 0x300 bytes sectors are aligned not to the bottom of address space (address 0), but to the top of address space.&amp;nbsp;The top most sector(page) is 0xFD00-FFFF, then 0xFA00-0xFCFF etc. In other words each sector starts at address&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;(0x10000 %&amp;nbsp;0x300) + (N * 0x300) = 0x100, 0x400, 0x700 etc&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Flash protection scheme&amp;nbsp;works not on multiple of 512 bytes, but on multiple of&amp;nbsp;two 768 sectors. See datasheet page 65. Flash Block Protection table. You can protect 0 kB, 1.5kB( 2x768), 3kB (4*768), 4.5kB etc.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(You may wonder why such odd sector size. Look at S08DE datasheet. With flash error correction (ECC) enabled, you have 512 bytes sectors, with ECC off you have 768 bytes sectors. Extra 256 bytes in the sector are used for errors correction. I guess DZ60 uses same flash arrays, just that the ECC feature is disabled.)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Apr 2011 16:01:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196646#M15741</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2011-04-05T16:01:42Z</dc:date>
    </item>
    <item>
      <title>Re: DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196647#M15742</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I didn't notice on p65 that if the base block address is not a multiple of 768, the protected area size is always.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You were right : the line you pointed on my code&lt;/P&gt;&lt;P&gt;lda&amp;nbsp;&amp;nbsp; ,x&lt;/P&gt;&lt;P&gt;is incorrect, since HX points to ADRS ...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I fixed my code by replacing this line by&lt;/P&gt;&lt;P&gt;lda FSTAT&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The funny, and also worrying, fact is that this bug is on a bootloader that I use on all my freescale projects. So far, it has gone through all tests !&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your help.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Pierre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Apr 2011 20:07:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196647#M15742</guid>
      <dc:creator>PierreAFD</dc:creator>
      <dc:date>2011-04-05T20:07:04Z</dc:date>
    </item>
    <item>
      <title>Re: DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196648#M15743</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Pierre,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For comparison purposes, I have attached some code that uses an alternative method for byte-by-byte programming.&amp;nbsp; This code uses a fixed location in RAM for the RAM resident code, rather than using the stack.&amp;nbsp; This code size requrement is less than 20 bytes, is common to erase and programming routines, and could alternatively be programmed to EEPROM, for the 'DZ60.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Apr 2011 00:46:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196648#M15743</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2011-04-06T00:46:59Z</dc:date>
    </item>
    <item>
      <title>Re: DZ60 - Problem flashing some adresses</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196649#M15744</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks, very compact !&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I also have the SGF reference driver (copyright ... motorola !! ).&lt;/P&gt;&lt;P&gt;Bigger, but complete.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Pierre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Apr 2011 14:47:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/DZ60-Problem-flashing-some-adresses/m-p/196649#M15744</guid>
      <dc:creator>PierreAFD</dc:creator>
      <dc:date>2011-04-06T14:47:55Z</dc:date>
    </item>
  </channel>
</rss>

