<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>I2C TWI</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/83368/i2c-twi</link><description>signed char BNO055_I2C_bus_read(unsigned char dev_addr,unsigned char reg_addr, unsigned char *reg_data, unsigned char cnt) { BNO055_RETURN_FUNCTION_TYPE comres = BNO055_ZERO_U8X; I2C.beginTransmission(dev_addr); //Start of transmission I2C.write(reg_addr</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 07 Jan 2022 06:07:05 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/83368/i2c-twi" /><item><title>RE: I2C TWI</title><link>https://devzone.nordicsemi.com/thread/346593?ContentTypeID=1</link><pubDate>Fri, 07 Jan 2022 06:07:05 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1b31338c-a2dc-41cc-9aa2-8ca073f3e211</guid><dc:creator>Abrar</dc:creator><description>&lt;table height="1263" width="508"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;#define TWI_INSTANCE_ID 0 // create a ID constant&lt;/p&gt;
&lt;p&gt;static volatile bool m_xfer_done = false;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;static const nrf_drv_twi_t m_twi = NRF_DRV_TWI_INSTANCE(TWI_INSTANCE_ID);&lt;/p&gt;
&lt;p&gt;void twi_handler(nrf_drv_twi_evt_t const* p_event, void * p_context)&lt;br /&gt;{&lt;br /&gt; switch (p_event-&amp;gt; type)&lt;br /&gt; {&lt;br /&gt; case NRF_DRV_TWI_EVT_DONE:&lt;br /&gt; break;&lt;/p&gt;
&lt;p&gt;m_xfer_done = true;&lt;br /&gt; break;&lt;/p&gt;
&lt;p&gt;default:&lt;br /&gt; break;&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;// a function to initialize the twi(i2c)&lt;br /&gt;void twi_master_init(void)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; const nrf_drv_twi_config_t twi_config = {&lt;br /&gt; .scl = 27,&amp;nbsp;&lt;br /&gt; .sda = 26 ,&lt;br /&gt; .frequency = NRF_DRV_TWI_FREQ_100K,&amp;nbsp;&lt;br /&gt; .interrupt_priority = APP_IRQ_PRIORITY_HIGH,&amp;nbsp;&lt;br /&gt; .clear_bus_init = false&amp;nbsp;&lt;/p&gt;
&lt;p&gt;err_code = nrf_drv_twi_init(&amp;amp;m_twi, &amp;amp;twi_config, NULL, NULL);&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; APP_ERROR_CHECK(err_code);&lt;br /&gt; nrf_drv_twi_enable(&amp;amp;m_twi);&amp;nbsp;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;s8 BNO055_I2C_bus_write(u8 dev_addr, u8 reg_addr, u8 *reg_data, u8 cnt)&lt;br /&gt;{&lt;/p&gt;
&lt;p&gt;ret_code_t err_code;&lt;br /&gt; s32 BNO055_iERROR = &lt;span&gt;BNO055_ZERO_U8X&lt;/span&gt;;&lt;br /&gt; u8 array[I2C_BUFFER_LEN];&lt;br /&gt; u8 stringpos = &lt;span&gt;BNO055_ZERO_U8X&lt;/span&gt;;&lt;br /&gt; m_xfer_done = false;&lt;br /&gt; array[&lt;span&gt;BNO055_ZERO_U8X&lt;/span&gt;] = reg_addr;&lt;/p&gt;
&lt;p&gt;err_code =nrf_drv_twi_tx(&amp;amp;m_twi, BNO055_I2C_ADDR1,array,I2C_BUFFER_LEN,false );&lt;br /&gt; &lt;br /&gt; while (m_xfer_done == false)&lt;br /&gt; {&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;if (NRF_SUCCESS != err_code)&lt;br /&gt; {&lt;br /&gt; return false;&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;for (stringpos = &lt;span&gt;BNO055_ZERO_U8X&lt;/span&gt;; stringpos &amp;lt; cnt; stringpos++)&lt;br /&gt; {&lt;br /&gt; array[stringpos + BNO055_I2C_BUS_WRITE_ARRAY_INDEX] = *(reg_data + stringpos);&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;s8 BNO055_I2C_bus_read(u8 dev_addr, u8 reg_addr, u8 *reg_data, u8 cnt)&lt;br /&gt;{&lt;br /&gt; ret_code_t err_code;&lt;/p&gt;
&lt;p&gt;m_xfer_done = false;&lt;br /&gt; s32 BNO055_iERROR = &lt;span&gt;BNO055_ZERO_U8X&lt;/span&gt;;&lt;br /&gt; u8 array[I2C_BUFFER_LEN] = { &lt;span&gt;BNO055_ZERO_U8X&lt;/span&gt; };&lt;br /&gt; u8 stringpos = &lt;span&gt;BNO055_ZERO_U8X&lt;/span&gt;;&lt;/p&gt;
&lt;p&gt;array[&lt;span&gt;BNO055_ZERO_U8X&lt;/span&gt;] = reg_addr;&lt;/p&gt;
&lt;p&gt;err_code= nrf_drv_twi_tx(&amp;amp;m_twi, BNO055_I2C_ADDR1, array, 1, true );&lt;/p&gt;
&lt;p&gt;while (m_xfer_done == false)&lt;br /&gt; {}&lt;br /&gt; if (NRF_SUCCESS != err_code)&lt;br /&gt; {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; m_xfer_done=false;&lt;/p&gt;
&lt;p&gt;err_code=nrf_drv_twi_rx (&amp;amp;m_twi,BNO055_I2C_ADDR1,reg_data, cnt);&lt;br /&gt; while (m_xfer_done == false)&lt;br /&gt; {}&lt;br /&gt; if (NRF_SUCCESS != err_code)&lt;br /&gt; {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; for (stringpos =&amp;nbsp;&lt;span&gt;BNO055_ZERO_U8X&lt;/span&gt;; stringpos &amp;lt; cnt; stringpos++)&lt;br /&gt; {&lt;br /&gt; *(reg_data + stringpos) = array[stringpos];&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;return (s8)BNO055_iERROR;&lt;br /&gt;}&lt;/p&gt;
&lt;span style="font-family:Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size:12px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Is this one correct?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: I2C TWI</title><link>https://devzone.nordicsemi.com/thread/346523?ContentTypeID=1</link><pubDate>Thu, 06 Jan 2022 14:53:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:60f5c0b7-8ad8-4eb3-a979-4c07ea948c32</guid><dc:creator>Stian R&amp;#248;ed Hafskjold</dc:creator><description>&lt;p&gt;Hi, you should start out with an I2C sample from the SDK, to see how it works, and then do the necessary modifications.&lt;/p&gt;
&lt;p&gt;If you are using the nRF5 SDK, you can start with this sample: &lt;a href="https://infocenter.nordicsemi.com/topic/sdk_nrf5_v17.1.0/twi_sensor_example.html?cp=8_1_4_6_43"&gt;https://infocenter.nordicsemi.com/topic/sdk_nrf5_v17.1.0/twi_sensor_example.html?cp=8_1_4_6_43&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For Zephyr, you can probably start with one of the sensor applications that uses I2C: &lt;a href="http://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/samples/sensor/sensor.html"&gt;http://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/samples/sensor/sensor.html&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>