<?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>nRF52840 Dongle + s140 softdevice + SPI</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/72016/nrf52840-dongle-s140-softdevice-spi</link><description>I am working on a device driver for the W25Q128JV flash device. This is the first SPI device I&amp;#39;ve used with the nRF52840. I had some observations and questions about SPI programming on this mcu. 
 
 
 int w25q128_flash__read_device_id(w25q128_flash f</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 03 Mar 2021 21:39:53 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/72016/nrf52840-dongle-s140-softdevice-spi" /><item><title>RE: nRF52840 Dongle + s140 softdevice + SPI</title><link>https://devzone.nordicsemi.com/thread/297629?ContentTypeID=1</link><pubDate>Wed, 03 Mar 2021 21:39:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:dfb72aa5-5a35-4081-8926-8ebd52abc5a7</guid><dc:creator>fe-hadella</dc:creator><description>&lt;p&gt;Thanks! Can&amp;#39;t believe I missed something so obvious.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52840 Dongle + s140 softdevice + SPI</title><link>https://devzone.nordicsemi.com/thread/297446?ContentTypeID=1</link><pubDate>Wed, 03 Mar 2021 10:32:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:58c8381b-0a55-4827-98a4-999f08440023</guid><dc:creator>JONATHAN LL</dc:creator><description>[quote user="fe-hadella"]uint8_t&amp;nbsp;wr_len[/quote]
&lt;p&gt;&amp;nbsp;Here is you problem&lt;br /&gt;&lt;img src="https://devzone.nordicsemi.com/resized-image/__size/320x240/__key/communityserver-discussions-components-files/4/0755.pastedimage1614767549584v1.png" alt=" " /&gt;&lt;br /&gt;&lt;br /&gt;Edit to uint16_t and you are good&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Jonathan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52840 Dongle + s140 softdevice + SPI</title><link>https://devzone.nordicsemi.com/thread/297322?ContentTypeID=1</link><pubDate>Tue, 02 Mar 2021 22:27:19 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8603b792-4bb8-4d81-a42b-daa147dd9425</guid><dc:creator>fe-hadella</dc:creator><description>&lt;p&gt;I am confused at this point. I&amp;#39;ve read through the various headers and the data sheet for the nRF52840 and they all say the TXD.MAXCNT is a 16-bit value.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve been able to read &amp;gt; 256 bytes in one call no problem. The trouble is the tx can send only 251 at once so far. I&amp;#39;ve read through many cases on the devzone, and haven&amp;#39;t really seen anyone else clear this up completely.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m using the latest SDK 17.2. Not sure where in the code this weird restriction takes place.&lt;/p&gt;
&lt;p&gt;I am missing a step here? I have attempted to set the TXD.MAXCNT variable. This is fine, but the call to static spim_xfer will override this anyway to whatever value setup via the&amp;nbsp;nrfx_spim_xfer_desc_t data structure. Is there some other register that needs to be set globally?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52840 Dongle + s140 softdevice + SPI</title><link>https://devzone.nordicsemi.com/thread/297100?ContentTypeID=1</link><pubDate>Tue, 02 Mar 2021 09:54:18 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:abdf5662-17ad-423e-b751-7b5d1c367862</guid><dc:creator>JONATHAN LL</dc:creator><description>&lt;p&gt;&lt;br /&gt;Here is a overview of the MAXCNT registers for peripherals on each 52 chip:&amp;nbsp;&lt;a href="https://infocenter.nordicsemi.com/topic/struct_nrf52/struct/nrf52.html?cp=4"&gt;https://infocenter.nordicsemi.com/topic/struct_nrf52/struct/nrf52.html?cp=4&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Using nrfx_spi supports longer transfers but since it is legacy SPI&amp;nbsp; peripheral the CPU need to be updated the byte that is sendt\received for each byte.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;nrfx_spim will allow you to use 16bit lengths, (65535 bytes) per transfer.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Jonathan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52840 Dongle + s140 softdevice + SPI</title><link>https://devzone.nordicsemi.com/thread/296637?ContentTypeID=1</link><pubDate>Fri, 26 Feb 2021 18:38:02 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:158ccbbf-2940-4bbd-bc77-21ca07e1e7b5</guid><dc:creator>fe-hadella</dc:creator><description>&lt;p&gt;I switched to use the nrfx_spim driver. I was able to remove the legacy spi driver as far as I can tell.&lt;/p&gt;
&lt;p&gt;I updated the xfer function to look like:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;static&amp;nbsp;int&amp;nbsp;local_spi_xfer(w25q128_flash&amp;nbsp;f,&amp;nbsp;uint8_t&amp;nbsp;const&amp;nbsp;*wr_buf,&amp;nbsp;uint8_t&amp;nbsp;wr_len,&amp;nbsp;uint8_t&amp;nbsp;*rd_buf,&amp;nbsp;uint16_t&amp;nbsp;rd_len)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;*rbuf&amp;nbsp;=&amp;nbsp;malloc(wr_len&amp;nbsp;+&amp;nbsp;rd_len);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(NULL&amp;nbsp;==&amp;nbsp;rbuf)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;FLASH_MALLOC_ERR;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nrfx_spim_xfer_desc_t&amp;nbsp;const&amp;nbsp;xfer_desc&amp;nbsp;=&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.p_tx_buffer&amp;nbsp;=&amp;nbsp;wr_buf,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.tx_length&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;wr_len,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.p_rx_buffer&amp;nbsp;=&amp;nbsp;rbuf,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.rx_length&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;wr_len&amp;nbsp;+&amp;nbsp;rd_len,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret_code_t&amp;nbsp;ret&amp;nbsp;=&amp;nbsp;FLASH_SUCCESS;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nrf_gpio_pin_clear(f-&amp;gt;cs_pin);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret&amp;nbsp;=&amp;nbsp;nrfx_spim_xfer(f-&amp;gt;spi,&amp;nbsp;&amp;amp;xfer_desc,&amp;nbsp;0);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nrf_gpio_pin_set(f-&amp;gt;cs_pin);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(NULL&amp;nbsp;!=&amp;nbsp;rd_buf)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(rd_buf,&amp;nbsp;rbuf&amp;nbsp;+&amp;nbsp;wr_len,&amp;nbsp;rd_len);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;free(rbuf);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;ret;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;There still seems to be an issue for certain&amp;nbsp;write length. I can write up to 251 bytes -- with the instruction code and address bytes, that brings the total write to 255, which seems to be the max. If I write 252 bytes, then the function call has no effect at all if I then read back what is written.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Is there some setting in the sdk_config.h that controls this? In the setup, I&amp;#39;ve set the handler to NULL, so this is a blocking call.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52840 Dongle + s140 softdevice + SPI</title><link>https://devzone.nordicsemi.com/thread/296453?ContentTypeID=1</link><pubDate>Fri, 26 Feb 2021 09:16:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5900ed6b-76fe-4b3b-aa42-7edea9ba6f7d</guid><dc:creator>JONATHAN LL</dc:creator><description>&lt;p&gt;Hi,&lt;br /&gt;&lt;br /&gt;Not certain the first approach you suggest is the best, since it re-write the &lt;em&gt;write buffer&lt;/em&gt; in RAM with what&amp;#39;s&amp;nbsp;showing up on the MISO at the same time as it sends out data on MOSI. In theory the peripheral is probably done reading the relevant byte from RAM before the transfere starts.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;255 byte limit is correct for the nRF52832 SPIM, witch is a 8-bit MAXCNT register.&lt;br /&gt;&lt;br /&gt;If you wish to send longer packages i would recommend to migrate to &lt;strong&gt;nrfx_spim&lt;/strong&gt; as a alternative to &lt;strong&gt;nrf_drv_spi&lt;/strong&gt; diver.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Jonathan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52840 Dongle + s140 softdevice + SPI</title><link>https://devzone.nordicsemi.com/thread/296398?ContentTypeID=1</link><pubDate>Fri, 26 Feb 2021 00:22:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0de95b68-2212-45d5-92f7-5b43952dc96a</guid><dc:creator>fe-hadella</dc:creator><description>&lt;p&gt;I made some logical updates which make the code make more sense to me. This handles the offset issue I described previously.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;int&amp;nbsp;w25q128_flash__read_jedec_id(w25q128_flash&amp;nbsp;f,&amp;nbsp;uint32_t&amp;nbsp;*jedec_id)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(NULL&amp;nbsp;==&amp;nbsp;f)&amp;nbsp;return&amp;nbsp;FLASH_NO_EXIST;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;wr_buf[1]&amp;nbsp;=&amp;nbsp;{FLASH_REG_RD_JEDEC_ID};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;rd_buf[3]&amp;nbsp;=&amp;nbsp;{0};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret_code_t&amp;nbsp;ret&amp;nbsp;=&amp;nbsp;local_spi_xfer(f,&amp;nbsp;wr_buf,&amp;nbsp;1,&amp;nbsp;rd_buf,&amp;nbsp;3);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*jedec_id&amp;nbsp;=&amp;nbsp;rd_buf[0]&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;16&amp;nbsp;|&amp;nbsp;rd_buf[1]&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;8&amp;nbsp;|&amp;nbsp;rd_buf[2];&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;ret;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;int&amp;nbsp;w25q128_flash__read_device_id(w25q128_flash&amp;nbsp;f,&amp;nbsp;uint8_t&amp;nbsp;*device_id)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(NULL&amp;nbsp;==&amp;nbsp;f)&amp;nbsp;return&amp;nbsp;FLASH_NO_EXIST;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;wr_buf[4]&amp;nbsp;=&amp;nbsp;{FLASH_REG_RD_DEVICE_ID,&amp;nbsp;0x00,&amp;nbsp;0x00,&amp;nbsp;0x00};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;local_spi_xfer(f,&amp;nbsp;wr_buf,&amp;nbsp;4,&amp;nbsp;device_id,&amp;nbsp;1);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;static&amp;nbsp;int&amp;nbsp;local_spi_xfer(w25q128_flash&amp;nbsp;f,&amp;nbsp;uint8_t&amp;nbsp;const&amp;nbsp;*wr_buf,&amp;nbsp;uint8_t&amp;nbsp;wr_len,&amp;nbsp;uint8_t&amp;nbsp;*rd_buf,&amp;nbsp;uint8_t&amp;nbsp;rd_len)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;*rbuf&amp;nbsp;=&amp;nbsp;malloc(wr_len&amp;nbsp;+&amp;nbsp;rd_len);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(NULL&amp;nbsp;==&amp;nbsp;rbuf)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;FLASH_MALLOC_ERR;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;rlen&amp;nbsp;=&amp;nbsp;wr_len&amp;nbsp;+&amp;nbsp;rd_len;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret_code_t&amp;nbsp;ret&amp;nbsp;=&amp;nbsp;FLASH_SUCCESS;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nrf_gpio_pin_clear(f-&amp;gt;cs_pin);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret&amp;nbsp;=&amp;nbsp;nrf_drv_spi_transfer(f-&amp;gt;spi,&amp;nbsp;wr_buf,&amp;nbsp;wr_len,&amp;nbsp;rbuf,&amp;nbsp;rlen);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nrf_gpio_pin_set(f-&amp;gt;cs_pin);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(NULL&amp;nbsp;!=&amp;nbsp;rd_buf)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(rd_buf,&amp;nbsp;rbuf&amp;nbsp;+&amp;nbsp;wr_len,&amp;nbsp;rd_len);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;free(rbuf);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;ret;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;This brings up a question. There is a size limitation imposed by the call to nrf_drv_spi_transfer().&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;__STATIC_INLINE&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;ret_code_t&amp;nbsp;nrf_drv_spi_transfer(nrf_drv_spi_t&amp;nbsp;const&amp;nbsp;*&amp;nbsp;const&amp;nbsp;p_instance,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;const&amp;nbsp;*&amp;nbsp;p_tx_buffer,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tx_buffer_length,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;p_rx_buffer,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rx_buffer_length);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;The actual struct internally uses a size_t which is certainly larger than 255 max length. The flash itself has the ability to write up to 256 bytes at once, before a cyclic page overwrite occurs. This sort of implies I need to write a full page in two chunks.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;If I were to call&amp;nbsp;&lt;/span&gt;&lt;/span&gt;nrfx_spi_xfer() instead, I would be able to setup the&amp;nbsp;nrfx_spi_xfer_desc_t data structure directly. I guess my question is the 256 bytes thing a hardware limitation or not? I only used the&amp;nbsp;&lt;span&gt;nrf_drv_spi_transfer() call since that&amp;#39;s what the spi demo was using.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>