<?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>Slow SPI performance with zephyr</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/81966/slow-spi-performance-with-zephyr</link><description>SDK Environment: nRF Connect SDK v1.7.1 
 Target: Decawave DWM1001-DEV. This uses the nRF52832 
 A 5 byte SPI transfer is taking about 17us when using the nordic spim drivers and about 56us when using the zephyr spim drivers. 
 SPI CLK frequency = 8M</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 06 Dec 2021 16:14:51 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/81966/slow-spi-performance-with-zephyr" /><item><title>RE: Slow SPI performance with zephyr</title><link>https://devzone.nordicsemi.com/thread/342155?ContentTypeID=1</link><pubDate>Mon, 06 Dec 2021 16:14:51 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2a03979f-38f0-42fc-8103-9548eb290924</guid><dc:creator>Saleh</dc:creator><description>&lt;p&gt;Hi Again&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Sorry for the late reply, I have tested the sample project, using the original branch of Zephyr project (&lt;a href="https://github.com/zephyrproject-rtos/zephyr"&gt;https://github.com/zephyrproject-rtos/zephyr&lt;/a&gt;), which is usually ahead of the mirror of Zephyr which is used in the nordic sdk. So I can say the last modification of Zephyr has been considered.&lt;/p&gt;
&lt;p&gt;Because only I had access to nrf52833dk, then I have made some minor changes in order to run the sample on my hardware, And here you can find the result:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://devzone.nordicsemi.com/resized-image/__size/320x240/__key/communityserver-discussions-components-files/4/pastedimage1638802182466v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The time between when Chip selector is enabled until when SPI-CLK starts, is about 5us, and the time between when SPI-CLK stops until when the chip selector has disabled, is about 17us, so very close to what you have seen before. I can say it is the normal operation of last Zephyr driver and maybe it could be improved. You can report the problem into the Zephyr&amp;#39;s github page.&lt;/p&gt;
&lt;p&gt;Also I tried to disable the &amp;quot;chip selector&amp;quot; functionality of Zephyr&amp;#39;s driver by setting the pointer to NULL and trying to toggle the corresponding pin manually, but the result was similar. Actually &amp;quot;spi_transceive&amp;quot; function returns after a delay, despite of the &amp;quot;chip select&amp;quot; functionality.&lt;/p&gt;
&lt;p&gt;------------------------------------------------------&lt;/p&gt;
&lt;p&gt;PS: to measure the time of running a function or some line of the code, you can use the built-in api of Zephyr instead of toggling a gipo and measuring by the external tools. You can find more information here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.zephyrproject.org/latest/reference/timing_functions/index.html"&gt;https://docs.zephyrproject.org/latest/reference/timing_functions/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Saleh&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Slow SPI performance with zephyr</title><link>https://devzone.nordicsemi.com/thread/341932?ContentTypeID=1</link><pubDate>Fri, 03 Dec 2021 22:43:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ab1b8ce3-5296-4740-b4b9-15bab16ecf95</guid><dc:creator>dwalton65</dc:creator><description>&lt;p&gt;Any thoughts on this?&lt;/p&gt;
&lt;p&gt;I would rather use the zephyr drivers as I am having occasional reliability problems with my use of the Nordic drivers.&amp;nbsp; See&amp;nbsp;&lt;a href="https://devzone.nordicsemi.com/f/nordic-q-a/82008/nrfx_spim-driver-sometimes-does-not-call-the-event-handler"&gt;nrfx_spim-driver-sometimes-does-not-call-the-event-handler&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Slow SPI performance with zephyr</title><link>https://devzone.nordicsemi.com/thread/340423?ContentTypeID=1</link><pubDate>Tue, 23 Nov 2021 19:51:13 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:59621c84-bafd-4b9b-9f84-36b19d88a2e0</guid><dc:creator>dwalton65</dc:creator><description>&lt;p&gt;Can you not see the attachments in the first post? They show up on my end.&lt;/p&gt;
&lt;p&gt;I will insert them into the text here as well.&lt;/p&gt;
&lt;p&gt;I do not have a board overlay as I copied the board definition to the project and edited that. The only change to the board &amp;quot;decawave_dwm1001_dev&amp;quot; was to add a node label to the line &lt;code&gt;dw1000_dev: dw1000@0 {&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;quot;decawave_dwm1001_dev2.dts&amp;quot; all the other board files are the same as in &amp;quot;v1.7.1\zephyr\boards\arm\decawave_dwm1001_dev&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;pre class="ui-code" data-mode="text"&gt;/*
 * Copyright (c) 2019 St&amp;#233;phane D&amp;#39;Alu
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include &amp;lt;nordic/nrf52832_qfaa.dtsi&amp;gt;

/ {
	model = &amp;quot;Decawave DWM1001-DEV2&amp;quot;;
	compatible = &amp;quot;decawave,dwm1001&amp;quot;;

	chosen {
		zephyr,console        = &amp;amp;uart0;
		zephyr,shell-uart     = &amp;amp;uart0;
		zephyr,uart-mcumgr    = &amp;amp;uart0;
		zephyr,bt-mon-uart    = &amp;amp;uart0;
		zephyr,bt-c2h-uart    = &amp;amp;uart0;
		zephyr,sram           = &amp;amp;sram0;
		zephyr,flash          = &amp;amp;flash0;
		zephyr,code-partition = &amp;amp;slot0_partition;
	};

	leds {
		compatible = &amp;quot;gpio-leds&amp;quot;;
		led0_red: led_0 {
			gpios = &amp;lt;&amp;amp;gpio0 14 GPIO_ACTIVE_LOW&amp;gt;;
			label = &amp;quot;Red LED 0&amp;quot;;
		};
		led1_green: led_1 {
			gpios = &amp;lt;&amp;amp;gpio0 30 GPIO_ACTIVE_LOW&amp;gt;;
			label = &amp;quot;Green LED 1&amp;quot;;
		};
		led2_red: led_2 {
			gpios = &amp;lt;&amp;amp;gpio0 22 GPIO_ACTIVE_LOW&amp;gt;;
			label = &amp;quot;Red LED 2&amp;quot;;
		};
		led3_blue: led_3 {
			gpios = &amp;lt;&amp;amp;gpio0 31 GPIO_ACTIVE_LOW&amp;gt;;
			label = &amp;quot;Blue LED 3&amp;quot;;
		};
	};

	pwmleds {
		compatible = &amp;quot;pwm-leds&amp;quot;;
		pwm_led0_red: pwm_led_0 {
			pwms = &amp;lt;&amp;amp;pwm0 22&amp;gt;;
			label = &amp;quot;Red PWM LED&amp;quot;;
		};
	};

	buttons {
		compatible = &amp;quot;gpio-keys&amp;quot;;
		button0: button_0 {
			gpios = &amp;lt;&amp;amp;gpio0 2 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)&amp;gt;;
			label = &amp;quot;Push button switch 0&amp;quot;;
		};
	};

	/* These aliases are provided for compatibility with samples */
	aliases {
		sw0        = &amp;amp;button0;
		led0       = &amp;amp;led0_red;
		led1       = &amp;amp;led1_green;
		led2       = &amp;amp;led2_red;
		led3       = &amp;amp;led3_blue;
		led0-red   = &amp;amp;led0_red;
		led1-green = &amp;amp;led1_green;
		led2-red   = &amp;amp;led2_red;
		led3-blue  = &amp;amp;led3_blue;
		pwm-led0   = &amp;amp;pwm_led0_red;
	};
};

&amp;amp;adc {
	status = &amp;quot;okay&amp;quot;;
};

&amp;amp;gpiote {
	status = &amp;quot;okay&amp;quot;;
};

&amp;amp;gpio0 {
	status = &amp;quot;okay&amp;quot;;
};

&amp;amp;uart0 {
	status = &amp;quot;okay&amp;quot;;
	compatible = &amp;quot;nordic,nrf-uart&amp;quot;;
	current-speed = &amp;lt;115200&amp;gt;;
	tx-pin  = &amp;lt;5&amp;gt;;
	rx-pin  = &amp;lt;11&amp;gt;;
};

&amp;amp;i2c0 {
	compatible = &amp;quot;nordic,nrf-twim&amp;quot;;
	status = &amp;quot;okay&amp;quot;;
	clock-frequency = &amp;lt;I2C_BITRATE_FAST&amp;gt;;
	sda-pin = &amp;lt;29&amp;gt;;
	scl-pin = &amp;lt;28&amp;gt;;

	lis2dh12: lis2dh12@19 {
		compatible = &amp;quot;st,lis2dh12&amp;quot;, &amp;quot;st,lis2dh&amp;quot;;
		reg = &amp;lt;0x19&amp;gt;;
		irq-gpios = &amp;lt;&amp;amp;gpio0 25 GPIO_ACTIVE_HIGH&amp;gt;;
		label = &amp;quot;LIS2DH12-ACCEL&amp;quot;;
	};
};

&amp;amp;spi1 {
	compatible = &amp;quot;nordic,nrf-spi&amp;quot;;
	status = &amp;quot;okay&amp;quot;;
	sck-pin  = &amp;lt;4&amp;gt;;
	mosi-pin = &amp;lt;6&amp;gt;;
	miso-pin = &amp;lt;7&amp;gt;;
	cs-gpios = &amp;lt;&amp;amp;gpio0 3 0&amp;gt;;
};

&amp;amp;spi2 {
	compatible = &amp;quot;nordic,nrf-spim&amp;quot;;
	status = &amp;quot;okay&amp;quot;;
	sck-pin  = &amp;lt;16&amp;gt;;	
	mosi-pin = &amp;lt;20&amp;gt;;
	miso-pin = &amp;lt;18&amp;gt;;
	cs-gpios = &amp;lt;&amp;amp;gpio0 17 GPIO_ACTIVE_LOW&amp;gt;;

	dw1000_dev: dw1000@0 {
		compatible = &amp;quot;decawave,dw1000&amp;quot;;
		spi-max-frequency = &amp;lt;8000000&amp;gt;;
		int-gpios = &amp;lt;&amp;amp;gpio0 19 GPIO_ACTIVE_HIGH&amp;gt;;	/* P0.19 */
		reset-gpios = &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_LOW&amp;gt;;	/* P0.24 */
		status = &amp;quot;okay&amp;quot;;
		label = &amp;quot;DW1000&amp;quot;;
		reg = &amp;lt;0&amp;gt;;
	};
};

&amp;amp;pwm0 {
	status = &amp;quot;okay&amp;quot;;
	ch0-pin = &amp;lt;22&amp;gt;;
	ch0-inverted;
};

&amp;amp;flash0 {

	partitions {
		compatible = &amp;quot;fixed-partitions&amp;quot;;
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;1&amp;gt;;

		boot_partition: partition@0 {
			label = &amp;quot;mcuboot&amp;quot;;
			reg = &amp;lt;0x00000000 0xc000&amp;gt;;
		};
		slot0_partition: partition@c000 {
			label = &amp;quot;image-0&amp;quot;;
			reg = &amp;lt;0x0000C000 0x32000&amp;gt;;
		};
		slot1_partition: partition@3e000 {
			label = &amp;quot;image-1&amp;quot;;
			reg = &amp;lt;0x0003E000 0x32000&amp;gt;;
		};
		scratch_partition: partition@70000 {
			label = &amp;quot;image-scratch&amp;quot;;
			reg = &amp;lt;0x00070000 0xa000&amp;gt;;
		};
		storage_partition: partition@7a000 {
			label = &amp;quot;storage&amp;quot;;
			reg = &amp;lt;0x0007a000 0x00006000&amp;gt;;
		};
	};
};
&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;quot;prj.conf&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;CONFIG_SOC_NRF52832_ALLOW_SPIM_DESPITE_PAN_58=y&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;To build the project&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;west build -b decawave_dwm1001_dev2 -d build2 -- -DBOARD_ROOT=\ncs\myapps\zephyr_spim -DCONFIG_DEBUG_OPTIMIZATIONS=&amp;quot;y&amp;quot; -DCONFIG_OPENOCD_SUPPORT=&amp;quot;y&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Slow SPI performance with zephyr</title><link>https://devzone.nordicsemi.com/thread/340285?ContentTypeID=1</link><pubDate>Tue, 23 Nov 2021 09:57:45 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:81744760-81ac-4609-b363-e86edb8b7670</guid><dc:creator>Saleh</dc:creator><description>&lt;p&gt;Would you please add &amp;quot;&amp;lt;your board&amp;gt;.overlay&amp;quot;, &amp;quot;&amp;lt;your board&amp;gt;.conf&amp;quot; and &amp;quot;prj.conf&amp;quot; files here? then I can run the sample in order to check it on my side.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Slow SPI performance with zephyr</title><link>https://devzone.nordicsemi.com/thread/340193?ContentTypeID=1</link><pubDate>Mon, 22 Nov 2021 19:58:54 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:aa5c4ab0-049f-4da9-a127-a286013a401b</guid><dc:creator>dwalton65</dc:creator><description>&lt;p&gt;The following might read better than my last post:&lt;/p&gt;
[quote userid="106258" url="~/f/nordic-q-a/81966/slow-spi-performance-with-zephyr/340109#340109"]How do you set the SS signal?[/quote]
&lt;p&gt;I had attached the source code for the two test cases in the first post.&lt;br /&gt;&lt;br /&gt;I am using Zephyr OS build v2.6.99-ncs1-1. This is the version that came with nRF Connect SDK v1.7.1&lt;br /&gt;&lt;br /&gt;The following is the source code for the zephyr test:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/*&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;* Copyright (c) 2016 Intel Corporation&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;*&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;* SPDX-License-Identifier: Apache-2.0&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;*/&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#include &amp;lt;zephyr.h&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#include &amp;lt;device.h&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#include &amp;lt;string.h&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#include &amp;lt;drivers/gpio.h&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#include &amp;lt;nrfx_spim.h&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#include &amp;lt;device.h&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#include &amp;lt;drivers/spi.h&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#include &amp;lt;devicetree/spi.h&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#include &amp;lt;assert.h&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#define SLEEP_TIME&amp;nbsp;&amp;nbsp; &amp;nbsp;(100)&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// ms&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#define SPI_BUF_SIZE (255)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;const struct gpio_dt_spec test_j7_pin3 = {.port = DEVICE_DT_GET(DT_NODELABEL(gpio0)), .pin = 12, .dt_flags = GPIO_ACTIVE_HIGH};&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;const struct device* spi = DEVICE_DT_GET(DT_PARENT(DT_NODELABEL(dw1000_dev)));&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;const static struct spi_config spi_config_dw1000 = SPI_CONFIG_DT(DT_NODELABEL(dw1000_dev), SPI_WORD_SET(8), 0);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;uint8_t tx_buf [SPI_BUF_SIZE];&lt;/code&gt;&lt;br /&gt;&lt;code&gt;uint8_t rx_buf [SPI_BUF_SIZE];&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;void setup_spim(void)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!device_is_ready(spi_config_dw1000.cs-&amp;gt;gpio_dev))&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printk(&amp;quot;ERROR: spi gpio_dev not ready&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(;;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!device_is_ready(spi))&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printk(&amp;quot;ERROR: failed to open spi&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(;;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;/*&lt;/code&gt;&lt;br /&gt;&lt;code&gt;* Setup output test pins for external monitoring.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;*/&lt;/code&gt;&lt;br /&gt;&lt;code&gt;void testPin1Set()&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gpio_pin_set_dt(&amp;amp;test_j7_pin3, 1);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;void testPin1Clear()&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gpio_pin_set_dt(&amp;amp;test_j7_pin3, 0);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;void testPinsSetup()&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gpio_pin_configure_dt(&amp;amp;test_j7_pin3, GPIO_OUTPUT_INACTIVE);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;void main(void)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;testPinsSetup();&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;setup_spim();&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printk(&amp;quot;NRFX SPIM sample\n&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printk(&amp;quot;Read DW1000 DWT_DEVICE_ID\n&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (1)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;k_msleep(SLEEP_TIME);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;testPin1Set();&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;const int length = 5;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;memset(tx_buf, 0, length);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;memset(rx_buf, 0, length);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct spi_buf spi_buf_tx = {.buf = tx_buf, .len = length};&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct spi_buf spi_buf_rx = {.buf = rx_buf, .len = length};&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct spi_buf_set spi_buf_set_tx = {.buffers = &amp;amp;spi_buf_tx, .count = 1}; &lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct spi_buf_set spi_buf_set_rx = {.buffers = &amp;amp;spi_buf_rx, .count = 1}; &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;spi_transceive(spi, &amp;amp;spi_config_dw1000, &amp;amp;spi_buf_set_tx, &amp;amp;spi_buf_set_rx);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;testPin1Clear();&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Expecting DWT_DEVICE_ID&amp;nbsp;&amp;nbsp; (0xDECA0130)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //!&amp;lt; DW1000 MP device ID&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printk(&amp;quot;Result = %x\n&amp;quot;, *((uint32_t*) &amp;amp;rx_buf[1]));&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Slow SPI performance with zephyr</title><link>https://devzone.nordicsemi.com/thread/340192?ContentTypeID=1</link><pubDate>Mon, 22 Nov 2021 19:43:43 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0bcbb556-1599-4d8e-9ffc-36ca2168981d</guid><dc:creator>dwalton65</dc:creator><description>[quote userid="106258" url="~/f/nordic-q-a/81966/slow-spi-performance-with-zephyr/340109#340109"]How do you set the SS signal?[/quote]
&lt;p&gt;I had attached the source code for the two test cases in the first post.&lt;/p&gt;
&lt;p&gt;I am using Zephyr OS build v2.6.99-ncs1-1. This is the version that came with nRF Connect SDK v1.7.1&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The following is the source code for the zephyr test:&lt;/p&gt;
&lt;div style="background-color:#1e1e1e;color:#d4d4d4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, monospace;font-size:14px;font-weight:normal;line-height:19px;white-space:pre;"&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;&amp;nbsp;* Copyright (c) 2016 Intel Corporation&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;&amp;nbsp;* SPDX-License-Identifier: Apache-2.0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;zephyr.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;device.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;drivers/gpio.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;nrfx_spim.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;device.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;drivers/spi.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;devicetree/spi.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;assert.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;SLEEP_TIME&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &amp;nbsp;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;100&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// ms&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;SPI_BUF_SIZE&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; (&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;255&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;struct&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;gpio_dt_spec&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;test_j7_pin3&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = {.port = &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;DEVICE_DT_GET&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;DT_NODELABEL&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(gpio0)), .pin = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;12&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, .dt_flags = &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;GPIO_ACTIVE_HIGH&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;struct&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;device&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;* &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;DEVICE_DT_GET&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;DT_PARENT&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;DT_NODELABEL&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(dw1000_dev)));&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;struct&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;spi_config&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_config_dw1000&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;SPI_CONFIG_DT&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;DT_NODELABEL&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(dw1000_dev), &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;SPI_WORD_SET&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;8&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;), &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#4ec9b0;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;tx_buf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; [&lt;/span&gt;&lt;span style="color: #569cd6;"&gt;SPI_BUF_SIZE&lt;/span&gt;&lt;span style="color: #d4d4d4;"&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#4ec9b0;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;rx_buf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; [&lt;/span&gt;&lt;span style="color: #569cd6;"&gt;SPI_BUF_SIZE&lt;/span&gt;&lt;span style="color: #d4d4d4;"&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;setup_spim&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (!&lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;device_is_ready&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_config_dw1000&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;cs&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;gpio_dev&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;printk&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;ERROR: spi gpio_dev not ready&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;for&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(;;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (!&lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;device_is_ready&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;printk&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;ERROR: failed to open spi&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;for&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(;;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;* Setup output test pins for external monitoring.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;testPin1Set&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;gpio_pin_set_dt&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;test_j7_pin3&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;testPin1Clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;gpio_pin_set_dt&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;test_j7_pin3&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;testPinsSetup&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;gpio_pin_configure_dt&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;test_j7_pin3&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;GPIO_OUTPUT_INACTIVE&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;main&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;testPinsSetup&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;setup_spim&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;printk&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;NRFX SPIM sample&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;printk&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Read DW1000 DWT_DEVICE_ID&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;while&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;k_msleep&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;SLEEP_TIME&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;testPin1Set&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;int&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;length&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;5&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;memset&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;tx_buf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;length&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;memset&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;rx_buf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;length&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;struct&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;spi_buf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_buf_tx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = {.buf = &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;tx_buf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, .len = &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;length&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;struct&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;spi_buf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_buf_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = {.buf = &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;rx_buf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, .len = &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;length&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;struct&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;spi_buf_set&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_buf_set_tx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = {.buffers = &amp;amp;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_buf_tx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, .count = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;}; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;struct&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;spi_buf_set&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_buf_set_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = {.buffers = &amp;amp;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_buf_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, .count = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;}; &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;spi_transceive&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &amp;amp;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_config_dw1000&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &amp;amp;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_buf_set_tx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &amp;amp;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;spi_buf_set_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;testPin1Clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Expecting DWT_DEVICE_ID &amp;nbsp; (0xDECA0130) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//!&amp;lt; DW1000 MP device ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;printk&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Result = &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;%x&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, *((&lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;uint32_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*) &amp;amp;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;rx_buf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[&lt;/span&gt;&lt;span style="color: #b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color: #d4d4d4;"&gt;]));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Slow SPI performance with zephyr</title><link>https://devzone.nordicsemi.com/thread/340109?ContentTypeID=1</link><pubDate>Mon, 22 Nov 2021 13:59:04 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c9f64c6c-c0ab-477f-b223-1a8901696c08</guid><dc:creator>Saleh</dc:creator><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The main difference can be seen in the above snapshots, is &amp;quot;SS&amp;quot; time (the time used to set chip select).&lt;/p&gt;
&lt;p&gt;How do you set the SS signal?&lt;/p&gt;
&lt;p&gt;In Zephyr, it is implemented by the software (there is no automatic assignment by the hardware), so you have two option, set/clear the the SS pin by your application before/after sending the SPI data, or you can leave it to the Zephyr to control the SS signal by a code similar to this:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#define SPI_NODE DT_NODELABEL(spi0)

const struct spi_cs_control spi_dev_cs_ctrl = {
	.gpio_dev = DEVICE_DT_GET(DT_GPIO_CTLR(SPI_NODE, cs_gpios)),
	.gpio_pin = DT_GPIO_PIN(SPI_NODE, cs_gpios),
	.gpio_dt_flags = DT_GPIO_FLAGS(SPI_NODE, cs_gpios)
};

const struct spi_config spi_cfg = {
	.operation = SPI_WORD_SET(8) | 
				SPI_TRANSFER_MSB |
				SPI_OP_MODE_MASTER,
	.frequency = 8000000,
	.cs = &amp;amp;spi_dev_cs_ctrl,
};&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;It is what I have measured (around 3 us from when SS has toggled until when clk has switched)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://devzone.nordicsemi.com/resized-image/__size/320x240/__key/communityserver-discussions-components-files/4/pastedimage1637589771198v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;PS: ensure you are using the last version of the Zephyr, maybe there are some bugs in older versions&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>