<?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: problems erasing EEPROM (9S12NE64) in S12 / MagniV Microcontrollers</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problems-erasing-EEPROM-9S12NE64/m-p/143409#M3557</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Section 4.1.1 "Writing the ECLKDIV Register".&lt;BR /&gt;&lt;BR /&gt;There you can see that the formula for your case is&lt;BR /&gt;&lt;BR /&gt;INT( (25MHz / 8) * (5 + 0.08us) ) = 15&lt;BR /&gt;&lt;BR /&gt;I don't think the -1 in your code is correct, you should only subtract if the clock cycle + 5 gives you an integer (ie you have a slow-motion oscillator). You end up with value 14 instead of 15.&lt;BR /&gt;&lt;BR /&gt;ECLK = (25MHz / 8) / (15 + 1) = 195kHz, within spec.&lt;BR /&gt;ECLK = (25MHz / 8) / (14 + 1) = 208kHz, too fast&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Though it seems odd that the EEPROM would be that picky. Perhaps it is, I have no idea. I recognize your error where the program hangs upon EEPROM write though, you get it if you have the wrong prescaler settings.&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 24 Jan 2007 21:58:57 GMT</pubDate>
    <dc:creator>Lundin</dc:creator>
    <dc:date>2007-01-24T21:58:57Z</dc:date>
    <item>
      <title>problems erasing EEPROM (9S12NE64)</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problems-erasing-EEPROM-9S12NE64/m-p/143408#M3556</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;i have this code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;const uint8* eeprom_mem_base = (uint8*)0x0800;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile uint8 ECLKDIV @(REG_BASE + 0x110);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile tFSTAT ESTAT @(REG_BASE + 0x115); /*EEPROM status register */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile tFCMD ECMD @(REG_BASE + 0x116); /*EEPROM command buffer */&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;int main()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;___INITEE = 0x09; /* lock EEPROM block to end at 0x0fff */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;InitEEPROM();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void InitEEPROM(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;const int OscFreq = 25000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ECLKDIV = ((OscFreq/200/8)-1) + 0x40;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;FCLKDIV = ((OscFreq/200/8)-1) + 0x40;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EraseEEPROM (eeprom_mem_base);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8 EraseEEPROM(uint16* address)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ESTAT.byte = ACCERR | PVIOL;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;FSTAT = ACCERR | PVIOL;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;*address = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ECMD.byte = MASS_ERASE; //erase cmd (0x41)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ESTAT.byte = CBEIF; //execute command&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;for(i = 0; i 10;++i)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//nop&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while( !( ESTAT.byte &amp;amp; 0xC0) ); //wait for CBEIF=CCIF=1 (cmd done)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//INFINITE LOOP&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//check error&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;A = FSTAT &amp;amp; 0x30;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(A)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;i want clear eeprom to write data before but program never ends EraseEEPROM function. I don't know if i'm setting bad ECLKDIV or if i have forgotten initialize some register.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 23 Jan 2007 01:17:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problems-erasing-EEPROM-9S12NE64/m-p/143408#M3556</guid>
      <dc:creator>ethy</dc:creator>
      <dc:date>2007-01-23T01:17:36Z</dc:date>
    </item>
    <item>
      <title>Re: problems erasing EEPROM (9S12NE64)</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problems-erasing-EEPROM-9S12NE64/m-p/143409#M3557</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Section 4.1.1 "Writing the ECLKDIV Register".&lt;BR /&gt;&lt;BR /&gt;There you can see that the formula for your case is&lt;BR /&gt;&lt;BR /&gt;INT( (25MHz / 8) * (5 + 0.08us) ) = 15&lt;BR /&gt;&lt;BR /&gt;I don't think the -1 in your code is correct, you should only subtract if the clock cycle + 5 gives you an integer (ie you have a slow-motion oscillator). You end up with value 14 instead of 15.&lt;BR /&gt;&lt;BR /&gt;ECLK = (25MHz / 8) / (15 + 1) = 195kHz, within spec.&lt;BR /&gt;ECLK = (25MHz / 8) / (14 + 1) = 208kHz, too fast&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Though it seems odd that the EEPROM would be that picky. Perhaps it is, I have no idea. I recognize your error where the program hangs upon EEPROM write though, you get it if you have the wrong prescaler settings.&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 24 Jan 2007 21:58:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problems-erasing-EEPROM-9S12NE64/m-p/143409#M3557</guid>
      <dc:creator>Lundin</dc:creator>
      <dc:date>2007-01-24T21:58:57Z</dc:date>
    </item>
    <item>
      <title>Re: problems erasing EEPROM (9S12NE64)</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problems-erasing-EEPROM-9S12NE64/m-p/143410#M3558</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi&lt;BR /&gt;&lt;BR /&gt;I don't think that the NE64 has any EEPROM - it has FLASH EEPROM, which is erased by writing the MASS_ERASE command to FCMD (address 0x106).&lt;BR /&gt;I don't think that there is a register ECMD.&lt;BR /&gt;ECMD is a standard register for HC12 with EEPROM (eg. MC9S12DP256 with 4k, ECMD at address 0x116) but there is no mention of this or any EEPROM in the NE64 user's manual and I believe this also to be the case.&lt;BR /&gt;&lt;BR /&gt;Are you confusing FLASH with EEPROM?&lt;BR /&gt;&lt;BR /&gt;Regards&lt;BR /&gt;&lt;BR /&gt;Mark Butcher&lt;BR /&gt;&lt;A href="http://www.uTasker.com" rel="nofollow" target="_blank"&gt;www.uTasker.com&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 28 Jan 2007 03:06:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problems-erasing-EEPROM-9S12NE64/m-p/143410#M3558</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2007-01-28T03:06:24Z</dc:date>
    </item>
  </channel>
</rss>

