<?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>Reading a second register over SPI seemingly overwrites value from first register read.</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/124182/reading-a-second-register-over-spi-seemingly-overwrites-value-from-first-register-read</link><description>I&amp;#39;m working in Windows using nRF Connect for VSCode and I&amp;#39;m trying to read registers from an ADXL345 over SPI. I have no issues reading the device ID in reg 0x00 but when I go to read the interrupt source reg 0x2D and print out its value, it seems to</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Sun, 07 Sep 2025 01:42:32 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/124182/reading-a-second-register-over-spi-seemingly-overwrites-value-from-first-register-read" /><item><title>RE: Reading a second register over SPI seemingly overwrites value from first register read.</title><link>https://devzone.nordicsemi.com/thread/547985?ContentTypeID=1</link><pubDate>Sun, 07 Sep 2025 01:42:32 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:89f29f22-32be-4f50-9c7f-f4cab213a1f1</guid><dc:creator>wagoo</dc:creator><description>&lt;p&gt;I still don&amp;#39;t quite understand why but it appears to have been fixed by:&lt;/p&gt;
&lt;p&gt;1. Transmitting the register + a dummy byte in &lt;code&gt;read_reg()&lt;/code&gt; and,&lt;/p&gt;
&lt;p&gt;2. Setting MSb of &lt;code&gt;reg&lt;/code&gt; (this is how read operations are defined for ADXL345)&lt;/p&gt;
&lt;p&gt;Of course also change the length of &lt;code&gt;tx_buffer&lt;/code&gt; on line 7, like so:&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static int read_reg(uint8_t reg, uint8_t *data, uint8_t size)
{
	int err;

	/* STEP 4.1 - Set the transmit and receive buffers */
	uint8_t tx_buffer[] = {0x80 | reg, 0x00};
	struct spi_buf tx_spi_buf			= {.buf = (void *)&amp;amp;tx_buffer, .len = sizeof(tx_buffer)};
	struct spi_buf_set tx_spi_buf_set 	= {.buffers = &amp;amp;tx_spi_buf, .count = 1};
	struct spi_buf rx_spi_bufs 			= {.buf = data, .len = size};
	struct spi_buf_set rx_spi_buf_set	= {.buffers = &amp;amp;rx_spi_bufs, .count = 1};

	/* STEP 4.2 - Call the transceive function */
	err = spi_transceive_dt(&amp;amp;spi, &amp;amp;tx_spi_buf_set, &amp;amp;rx_spi_buf_set);
	if (err &amp;lt; 0) {
		LOG_ERR(&amp;quot;spi_transceive_dt() failed, err: %d&amp;quot;, err);
		return err;
	}

	return 0;
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Reading a second register over SPI seemingly overwrites value from first register read.</title><link>https://devzone.nordicsemi.com/thread/547903?ContentTypeID=1</link><pubDate>Fri, 05 Sep 2025 11:58:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fdd13378-7de5-4f07-b47f-a5a81f60690e</guid><dc:creator>Benjamin</dc:creator><description>&lt;p&gt;Hi,&lt;br /&gt;This seems strange. You’re seeing an&amp;nbsp;unexpected register value from the first read, even before the second read starts? Could you capture a logic analyzer trace of this?&lt;/p&gt;
&lt;p&gt;Also, how are DEVID and INT_SOURCE defined? Could you upload the source file?&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Benjamin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>