<?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 LPC11u68 HardFault after using I2C connected device with EEPROM reading data in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11u68-HardFault-after-using-I2C-connected-device-with-EEPROM/m-p/770940#M31004</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have problem here that after I read some data from EEPROM, my I2C device (a touch keypad) is causing the system to HardFault. If I don't read data on EEPROM, the I2C device works normally with the whole system having no problem. However, as soon as I perform reading on EEPROM, once I touch any key on the keypad (the I2C device), system goes to HardFault.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I tried to trace down where it goes to HardFault, it's when running this line of code in i2c_11u6x.c&lt;/P&gt;&lt;P&gt;iic-&amp;gt;sXfer-&amp;gt;slaveAddr |= iic-&amp;gt;mXfer != 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The whole code block as follow:&lt;/P&gt;&lt;P&gt;&lt;EM&gt;/* I2C Slave event handler */&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;void Chip_I2C_SlaveStateHandler(I2C_ID_T id)&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;{&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;int ret;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;struct i2c_interface *iic = &amp;amp;i2c[id];&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Get the currently addressed slave */&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;if (!iic-&amp;gt;sXfer) {&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct i2c_slave_interface *si2c;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I2C_SLAVE_ID sid = getSlaveIndex(iic-&amp;gt;ip);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;si2c = &amp;amp;i2c_slave[id][sid];&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iic-&amp;gt;sXfer = si2c-&amp;gt;xfer;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iic-&amp;gt;sEvent = si2c-&amp;gt;event;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;iic-&amp;gt;sXfer-&amp;gt;slaveAddr |= iic-&amp;gt;mXfer != 0;&lt;/EM&gt;&lt;/STRONG&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;ret = handleSlaveXferState(iic-&amp;gt;ip, iic-&amp;gt;sXfer);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;if (ret) {&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (iic-&amp;gt;sXfer-&amp;gt;status == I2C_STATUS_DONE) {&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iic-&amp;gt;sXfer = 0;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iic-&amp;gt;sEvent(id, (I2C_EVENT_T) ret);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;}&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="Screen Shot 2018-04-26 at 9.51.52 AM.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/4696i285397FC50942F05/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screen Shot 2018-04-26 at 9.51.52 AM.png" alt="Screen Shot 2018-04-26 at 9.51.52 AM.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can anyone tell me why this is happening? Is EEPROM and I2C related in any way? I don't understand why EEPROM is affecting I2C.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 26 Apr 2018 02:00:19 GMT</pubDate>
    <dc:creator>leechen</dc:creator>
    <dc:date>2018-04-26T02:00:19Z</dc:date>
    <item>
      <title>LPC11u68 HardFault after using I2C connected device with EEPROM reading data</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11u68-HardFault-after-using-I2C-connected-device-with-EEPROM/m-p/770940#M31004</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have problem here that after I read some data from EEPROM, my I2C device (a touch keypad) is causing the system to HardFault. If I don't read data on EEPROM, the I2C device works normally with the whole system having no problem. However, as soon as I perform reading on EEPROM, once I touch any key on the keypad (the I2C device), system goes to HardFault.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I tried to trace down where it goes to HardFault, it's when running this line of code in i2c_11u6x.c&lt;/P&gt;&lt;P&gt;iic-&amp;gt;sXfer-&amp;gt;slaveAddr |= iic-&amp;gt;mXfer != 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The whole code block as follow:&lt;/P&gt;&lt;P&gt;&lt;EM&gt;/* I2C Slave event handler */&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;void Chip_I2C_SlaveStateHandler(I2C_ID_T id)&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;{&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;int ret;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;struct i2c_interface *iic = &amp;amp;i2c[id];&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Get the currently addressed slave */&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;if (!iic-&amp;gt;sXfer) {&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct i2c_slave_interface *si2c;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I2C_SLAVE_ID sid = getSlaveIndex(iic-&amp;gt;ip);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;si2c = &amp;amp;i2c_slave[id][sid];&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iic-&amp;gt;sXfer = si2c-&amp;gt;xfer;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iic-&amp;gt;sEvent = si2c-&amp;gt;event;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;iic-&amp;gt;sXfer-&amp;gt;slaveAddr |= iic-&amp;gt;mXfer != 0;&lt;/EM&gt;&lt;/STRONG&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;ret = handleSlaveXferState(iic-&amp;gt;ip, iic-&amp;gt;sXfer);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;if (ret) {&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (iic-&amp;gt;sXfer-&amp;gt;status == I2C_STATUS_DONE) {&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iic-&amp;gt;sXfer = 0;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iic-&amp;gt;sEvent(id, (I2C_EVENT_T) ret);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;}&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="Screen Shot 2018-04-26 at 9.51.52 AM.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/4696i285397FC50942F05/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screen Shot 2018-04-26 at 9.51.52 AM.png" alt="Screen Shot 2018-04-26 at 9.51.52 AM.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can anyone tell me why this is happening? Is EEPROM and I2C related in any way? I don't understand why EEPROM is affecting I2C.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 26 Apr 2018 02:00:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11u68-HardFault-after-using-I2C-connected-device-with-EEPROM/m-p/770940#M31004</guid>
      <dc:creator>leechen</dc:creator>
      <dc:date>2018-04-26T02:00:19Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11u68 HardFault after using I2C connected device with EEPROM reading data</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11u68-HardFault-after-using-I2C-connected-device-with-EEPROM/m-p/770941#M31005</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&amp;nbsp; &lt;A _jive_internal="true" data-content-finding="Community" data-userid="317149" data-username="leechen" href="https://community.nxp.com/people/leechen"&gt;Lee Chen&lt;/A&gt;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Please check this description from the user manual:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;27.7.1.7 Interrupts during IAP&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;The on-chip flash memory and EEPORM are not accessible during erase/write&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;operations. When the user application code starts executing, the interrupt vectors from the&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;user flash area are active.&lt;SPAN style="text-decoration: underline;"&gt;&lt;EM&gt; Before making any IAP call, either disable the interrupts or&lt;/EM&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN style="text-decoration: underline;"&gt;&lt;EM&gt;&lt;STRONG&gt;ensure that the user interrupt vectors are active in RAM and that the interrupt handlers&lt;/STRONG&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;STRONG&gt;&lt;EM&gt;&lt;SPAN style="text-decoration: underline;"&gt;reside in RAM&lt;/SPAN&gt;.&lt;/EM&gt; The IAP code does not use or disable interrupts.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, when you read the internal eeprom, you will call IAP functions, you need to disable the interrupts, or relocate your interrupt vectors in RAM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Wish it helps you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;Kerry&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Apr 2018 04:59:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11u68-HardFault-after-using-I2C-connected-device-with-EEPROM/m-p/770941#M31005</guid>
      <dc:creator>kerryzhou</dc:creator>
      <dc:date>2018-04-27T04:59:37Z</dc:date>
    </item>
  </channel>
</rss>

