<?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>uart1 TX not working on nRF7002DK</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/102804/uart1-tx-not-working-on-nrf7002dk</link><description>I&amp;#39;ve tried both using the uart_poll API and the uart_tx API. My code for uart_tx is below: 
 
 
 and my proj.conf: 
 
 
 I also added an overlay file, following instructions for forum posts such as this: NRF7002DK Use NRF5340 UART1 pins - Nordic Q&amp;amp;A </description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 21 Aug 2023 00:51:01 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/102804/uart1-tx-not-working-on-nrf7002dk" /><item><title>RE: uart1 TX not working on nRF7002DK</title><link>https://devzone.nordicsemi.com/thread/442186?ContentTypeID=1</link><pubDate>Mon, 21 Aug 2023 00:51:01 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c9f42b2a-2631-46aa-9fce-febef5fe9e2e</guid><dc:creator>Michael Zeng</dc:creator><description>&lt;p&gt;Firstly, appears that I did not handle the&amp;nbsp;UART_RX_BUF_REQUEST event correctly. The 2nd example provided a good reference.&lt;/p&gt;
&lt;p&gt;Secondly, I do not know why, but the UART communication did not work until I started a new project using SDK 2.4.0 (the old project was on 2.3.99, I perhaps messed with the configs in the past and forgot), and then pasted all the same code in.&lt;/p&gt;
&lt;p&gt;Thank you for your help Kenneth.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: uart1 TX not working on nRF7002DK</title><link>https://devzone.nordicsemi.com/thread/441799?ContentTypeID=1</link><pubDate>Thu, 17 Aug 2023 09:21:16 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7f8321b9-8f08-454d-a1bc-dd77f767d001</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;I can find there are several projects that use the UART driver, I suggest to use them as reference, some of them are:&lt;/p&gt;
&lt;p&gt;\nrf\samples\bluetooth\central_uart\src\main.c&lt;br /&gt;\nrf\samples\bluetooth\peripheral_uart\src\main.c&lt;/p&gt;
&lt;p&gt;\nrf\samples\peripheral\lpuart\src\main.c&lt;br /&gt;\nrf\tests\drivers\lpuart\src\main.c&lt;br /&gt;\zephyr\tests\drivers\uart\uart_async_api\src\test_uart_async.c&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: uart1 TX not working on nRF7002DK</title><link>https://devzone.nordicsemi.com/thread/441700?ContentTypeID=1</link><pubDate>Wed, 16 Aug 2023 16:56:41 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bed07b47-f6cb-4100-8f2c-52fff63fea9b</guid><dc:creator>Michael Zeng</dc:creator><description>&lt;p&gt;Hi Kenneth, thanks for the reply. I tried that as well:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/drivers/gpio.h&amp;gt;
#include &amp;lt;zephyr/drivers/i2c.h&amp;gt;
#include &amp;lt;zephyr/sys/printk.h&amp;gt;
#include &amp;lt;zephyr/drivers/uart.h&amp;gt;

#define SLEEP_TIME_MS   1000


const struct device *uart = DEVICE_DT_GET(DT_NODELABEL(uart0));

#define RECEIVE_BUFF_SIZE 10
static uint8_t rx_buf[RECEIVE_BUFF_SIZE]; //A buffer to store incoming UART data 


static void uart_cb(const struct device *dev, struct uart_event *evt, void *user_data)
{
	switch (evt-&amp;gt;type) {
	
	case UART_TX_DONE:
		// do something
		break;

	case UART_TX_ABORTED:
		// do something
		break;
		
	case UART_RX_RDY:
		printk(&amp;quot;	evt-&amp;gt;data.rx.len: %d\n&amp;quot;, evt-&amp;gt;data.rx.len);
		printk(&amp;quot;	evt-&amp;gt;data.rx.offset: %d\n&amp;quot;, evt-&amp;gt;data.rx.offset);
		printk(&amp;quot;    data: &amp;quot;);
		for (int i=0; i &amp;lt; evt-&amp;gt;data.rx.len; i++) {
			printk(&amp;quot;%02X &amp;quot;, evt-&amp;gt;data.rx.buf[evt-&amp;gt;data.rx.offset + i]);
		}
		printk(&amp;quot;\n&amp;quot;);
		break;

	case UART_RX_BUF_REQUEST:
		printk(&amp;quot;UART_RX_BUF_REQUEST\n&amp;quot;);
		int err = uart_rx_buf_rsp(uart, rx_buf, sizeof(rx_buf));
		if (err) {
			printk(&amp;quot;uart_rx_buf_rsp errored with code %d.\n&amp;quot;, err);
		}
		break;

	case UART_RX_BUF_RELEASED:
		printk(&amp;quot;UART_RX_BUF_RELEASED\n&amp;quot;);
		break;
		
	case UART_RX_DISABLED:
		printk(&amp;quot;UART_RX_DISABLED\n&amp;quot;);
		uart_rx_enable(uart, rx_buf, sizeof(rx_buf), SYS_FOREVER_US);
		break;

	case UART_RX_STOPPED:
		printk(&amp;quot;UART_RX_STOPPED\n&amp;quot;);
		break;
		
	default:
		break;
	}
}


int main(void)
{
	k_msleep(1000);
	printk(&amp;quot;Starting Program..\n&amp;quot;);

	int ret;

	// UART
	if (!device_is_ready(uart)) {
		printk(&amp;quot;uart not ready. returning.\n&amp;quot;);
		return;
	}

	const struct uart_config uart_cfg = {
		.baudrate = 115200,
		.parity = UART_CFG_PARITY_NONE,
		.stop_bits = UART_CFG_STOP_BITS_1,
		.data_bits = UART_CFG_DATA_BITS_8,
		.flow_ctrl = UART_CFG_FLOW_CTRL_NONE
	};
	ret = uart_configure(uart, &amp;amp;uart_cfg);
	if (ret == -ENOSYS) {
		return -ENOSYS;
	}

	ret = uart_callback_set(uart, uart_cb, NULL);
	if (ret) {
		return ret;
	}

	ret = uart_rx_enable(uart, rx_buf, sizeof(rx_buf), SYS_FOREVER_US);
	if (ret) {
		printk(&amp;quot;uart_rx_enable faild with ret=%d\n&amp;quot;, ret);
		return ret;
	}

	int ctr = 0;
	while (1) {

		printk(&amp;quot;uart0_rx looping... %d\n&amp;quot;, ctr);
		ctr++;

		k_msleep(SLEEP_TIME_MS);

	}
	return 0;
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The call to&amp;nbsp;uart_rx_buf_rsp() does not return an error. However, the uart communication still does not work.&lt;/p&gt;
&lt;p&gt;Hard to explain why the receiver works perfectly fine when using an Arduino to transmit UART data.&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;Michael&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: uart1 TX not working on nRF7002DK</title><link>https://devzone.nordicsemi.com/thread/441515?ContentTypeID=1</link><pubDate>Wed, 16 Aug 2023 07:41:50 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:83f007b3-492b-434f-b09c-beeebae7edc9</guid><dc:creator>Kenneth</dc:creator><description>[quote user="Michael Zeng"]The receiver callback function receives a single &amp;quot;UART_RX_BUF_REQUEST&amp;quot; upon powering on, but never receives any other events.[/quote]
&lt;p&gt;You are suppose to provide a buffer on this event by calling&amp;nbsp;uart_rx_buf_rsp().&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: uart1 TX not working on nRF7002DK</title><link>https://devzone.nordicsemi.com/thread/441508?ContentTypeID=1</link><pubDate>Wed, 16 Aug 2023 07:16:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3cbaf722-792a-4ab2-b2fe-942f79aa54da</guid><dc:creator>Michael Zeng</dc:creator><description>&lt;p&gt;I tested the nRF7002DK with the uart_tx code today with a logic analyzer; the logic analyzer (with the exact data rate, stop bit, parity, etc. that I programmed in the receiver) receives the transmitted data successfully.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I also tested my nRF7002DK with the uart receiver code again using an Arduino to transmit data. The receiver received and printed the data from the Arduino successfully.&lt;/p&gt;
&lt;p&gt;However, when I combine the nRF7002DK uart_tx code with the nRF7002DK receiver code, it doesn&amp;#39;t work. The receiver callback function receives a single &amp;quot;UART_RX_BUF_REQUEST&amp;quot; upon powering on, but never receives any other events.&lt;/p&gt;
&lt;p&gt;This is my receiver code, if it helps:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/drivers/gpio.h&amp;gt;
#include &amp;lt;zephyr/drivers/i2c.h&amp;gt;
#include &amp;lt;zephyr/sys/printk.h&amp;gt;
#include &amp;lt;zephyr/drivers/uart.h&amp;gt;

#define SLEEP_TIME_MS   1000


const struct device *uart = DEVICE_DT_GET(DT_NODELABEL(uart0));


static void uart_cb(const struct device *dev, struct uart_event *evt, void *user_data)
{
	switch (evt-&amp;gt;type) {
	
	case UART_TX_DONE:
		// do something
		break;

	case UART_TX_ABORTED:
		// do something
		break;
		
	case UART_RX_RDY:
		printk(&amp;quot;	evt-&amp;gt;data.rx.len: %d\n&amp;quot;, evt-&amp;gt;data.rx.len);
		printk(&amp;quot;	evt-&amp;gt;data.rx.offset: %d\n&amp;quot;, evt-&amp;gt;data.rx.offset);
		printk(&amp;quot;    data: &amp;quot;);
		for (int i=0; i &amp;lt; evt-&amp;gt;data.rx.len; i++) {
			printk(&amp;quot;%02X &amp;quot;, evt-&amp;gt;data.rx.buf[evt-&amp;gt;data.rx.offset + i]);
		}
		printk(&amp;quot;\n&amp;quot;);
		break;

	case UART_RX_BUF_REQUEST:
		printk(&amp;quot;UART_RX_BUF_REQUEST\n&amp;quot;);
		break;

	case UART_RX_BUF_RELEASED:
		printk(&amp;quot;UART_RX_BUF_RELEASED\n&amp;quot;);
		break;
		
	case UART_RX_DISABLED:
		printk(&amp;quot;UART_RX_DISABLED\n&amp;quot;);
		break;

	case UART_RX_STOPPED:
		printk(&amp;quot;UART_RX_STOPPED\n&amp;quot;);
		break;
		
	default:
		break;
	}
}


int main(void)
{
	k_msleep(1000);
	printk(&amp;quot;Starting Program..\n&amp;quot;);

	int ret;

	// UART
	if (!device_is_ready(uart)) {
		printk(&amp;quot;uart not ready. returning.\n&amp;quot;);
		return;
	}

	const struct uart_config uart_cfg = {
		.baudrate = 115200,
		.parity = UART_CFG_PARITY_NONE,
		.stop_bits = UART_CFG_STOP_BITS_1,
		.data_bits = UART_CFG_DATA_BITS_8,
		.flow_ctrl = UART_CFG_FLOW_CTRL_NONE
	};
	ret = uart_configure(uart, &amp;amp;uart_cfg);
	if (ret == -ENOSYS) {
		return -ENOSYS;
	}

	ret = uart_callback_set(uart, uart_cb, NULL);
	if (ret) {
		return ret;
	}

	static uint8_t rx_buf[3]; //A buffer to store incoming UART data 
	uart_rx_enable(uart, rx_buf, sizeof rx_buf, SYS_FOREVER_US);

	int ctr = 0;
	while (1) {

		printk(&amp;quot;uart0_rx looping... %d\n&amp;quot;, ctr);
		ctr++;

		k_msleep(SLEEP_TIME_MS);
		
	}
	return 0;
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Any other ideas?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: uart1 TX not working on nRF7002DK</title><link>https://devzone.nordicsemi.com/thread/441321?ContentTypeID=1</link><pubDate>Tue, 15 Aug 2023 09:10:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9fc7adff-4369-4afb-867e-6d74355cd535</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t have access to a nRF7002-DK today, but can try to replicate this before the weekend.&lt;/p&gt;
&lt;p&gt;If you have access to a logic analyzer you might look at the TX pin just to check if voltage and baudrate is correct.&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: uart1 TX not working on nRF7002DK</title><link>https://devzone.nordicsemi.com/thread/441296?ContentTypeID=1</link><pubDate>Tue, 15 Aug 2023 07:36:37 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:74379a7f-a11d-43e7-968d-aa019f771bad</guid><dc:creator>Michael Zeng</dc:creator><description>&lt;p&gt;Yes, after changing the overlay, I deleted the build folder and created a new build configuration. Clicking &amp;quot;Remove Build Configuration&amp;quot; in VSCode and creating a new Build Configuration should have the same effect though, right?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The issue seems to persist even with a different TX pin. For example, I tried this new overlay file using P0.09 and P0.10 for uart1 (and re-wired the dev kits appropriately):&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;// Allow uart1 to be used as a normal UART instead of forwarding to network core for serial logging
/delete-node/ &amp;amp;gpio_fwd;

&amp;amp;pinctrl {
	i2c1_default: i2c1_default {
		group1 {
			psels = &amp;lt;NRF_PSEL(TWIM_SDA, 1, 2)&amp;gt;,
				&amp;lt;NRF_PSEL(TWIM_SCL, 1, 3)&amp;gt;;
		};
	};

	i2c1_sleep: i2c1_sleep {
		group1 {
			psels = &amp;lt;NRF_PSEL(TWIM_SDA, 1, 2)&amp;gt;,
				&amp;lt;NRF_PSEL(TWIM_SCL, 1, 3)&amp;gt;;
			low-power-enable;
		};
	};

	uart0_default: uart0_default {
		group1 {
			psels = &amp;lt;NRF_PSEL(UART_TX, 0, 20)&amp;gt;,
				&amp;lt;NRF_PSEL(UART_RTS, 0, 19)&amp;gt;;
		};
		group2 {
			psels = &amp;lt;NRF_PSEL(UART_RX, 0, 22)&amp;gt;,
				&amp;lt;NRF_PSEL(UART_CTS, 0, 21)&amp;gt;;
			bias-pull-up;
		};
	};

	uart0_sleep: uart0_sleep {
		group1 {
			psels = &amp;lt;NRF_PSEL(UART_TX, 0, 20)&amp;gt;,
				&amp;lt;NRF_PSEL(UART_RX, 0, 22)&amp;gt;,
				&amp;lt;NRF_PSEL(UART_RTS, 0, 19)&amp;gt;,
				&amp;lt;NRF_PSEL(UART_CTS, 0, 21)&amp;gt;;
			low-power-enable;
		};
	};

	pwm0_default: pwm0_default {
		group1 {
			psels = &amp;lt;NRF_PSEL(PWM_OUT0, 1, 6)&amp;gt;;
		};
	};

	pwm0_sleep: pwm0_sleep {
		group1 {
			psels = &amp;lt;NRF_PSEL(PWM_OUT0, 1, 6)&amp;gt;;
			low-power-enable;
		};
	};

	qspi_default: qspi_default {
		group1 {
			psels = &amp;lt;NRF_PSEL(QSPI_SCK, 0, 17)&amp;gt;,
				&amp;lt;NRF_PSEL(QSPI_IO0, 0, 13)&amp;gt;,
				&amp;lt;NRF_PSEL(QSPI_IO1, 0, 14)&amp;gt;,
				&amp;lt;NRF_PSEL(QSPI_IO2, 0, 15)&amp;gt;,
				&amp;lt;NRF_PSEL(QSPI_IO3, 0, 16)&amp;gt;,
				&amp;lt;NRF_PSEL(QSPI_CSN, 0, 18)&amp;gt;;
		};
	};

	qspi_sleep: qspi_sleep {
		group1 {
			psels = &amp;lt;NRF_PSEL(QSPI_SCK, 0, 17)&amp;gt;,
				&amp;lt;NRF_PSEL(QSPI_IO0, 0, 13)&amp;gt;,
				&amp;lt;NRF_PSEL(QSPI_IO1, 0, 14)&amp;gt;,
				&amp;lt;NRF_PSEL(QSPI_IO2, 0, 15)&amp;gt;,
				&amp;lt;NRF_PSEL(QSPI_IO3, 0, 16)&amp;gt;,
				&amp;lt;NRF_PSEL(QSPI_CSN, 0, 18)&amp;gt;;
			low-power-enable;
		};
	};

    uart1_default: uart1_default {
		group1 {
			psels = &amp;lt;NRF_PSEL(UART_TX, 0, 10)&amp;gt;;
		};
		group2 {
			psels = &amp;lt;NRF_PSEL(UART_RX, 0, 9)&amp;gt;;
			bias-pull-up;
		};
	};

	uart1_sleep: uart1_sleep {
		group1 {
			psels = &amp;lt;NRF_PSEL(UART_TX, 0, 10)&amp;gt;,
				&amp;lt;NRF_PSEL(UART_RX, 0, 9)&amp;gt;;
			low-power-enable;
		};
	};

	spi3_default: spi3_default {
		group1 {
			psels = &amp;lt;NRF_PSEL(SPIM_SCK, 1, 15)&amp;gt;,
				&amp;lt;NRF_PSEL(SPIM_MISO, 1, 14)&amp;gt;,
				&amp;lt;NRF_PSEL(SPIM_MOSI, 1, 13)&amp;gt;;
		};
	};

	spi3_sleep: spi3_sleep {
		group1 {
			psels = &amp;lt;NRF_PSEL(SPIM_SCK, 1, 15)&amp;gt;,
				&amp;lt;NRF_PSEL(SPIM_MISO, 1, 14)&amp;gt;,
				&amp;lt;NRF_PSEL(SPIM_MOSI, 1, 13)&amp;gt;;
			low-power-enable;
		};
	};

	spi4_default: spi4_default {
		group1 {
			psels = &amp;lt;NRF_PSEL(SPIM_SCK, 0, 8)&amp;gt;,
				&amp;lt;NRF_PSEL(SPIM_MISO, 0, 10)&amp;gt;,
				&amp;lt;NRF_PSEL(SPIM_MOSI, 0, 9)&amp;gt;;
		};
	};

	spi4_sleep: spi4_sleep {
		group1 {
			psels = &amp;lt;NRF_PSEL(SPIM_SCK, 0, 8)&amp;gt;,
				&amp;lt;NRF_PSEL(SPIM_MISO, 0, 10)&amp;gt;,
				&amp;lt;NRF_PSEL(SPIM_MOSI, 0, 9)&amp;gt;;
			low-power-enable;
		};
	};

};


&amp;amp;uart1 {
	status = &amp;quot;okay&amp;quot;;
	current-speed = &amp;lt;115200&amp;gt;;
	pinctrl-0 = &amp;lt;&amp;amp;uart1_default&amp;gt;;
	pinctrl-1 = &amp;lt;&amp;amp;uart1_sleep&amp;gt;;
	pinctrl-names = &amp;quot;default&amp;quot;, &amp;quot;sleep&amp;quot;;
};&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve also tried swapping which DK is transmitting and which is receiving, which did not fix the issue.&lt;/p&gt;
&lt;p&gt;Also, in case it helps, this is the code running on the nRF7002DK receiver:&amp;nbsp;&lt;a href="https://github.com/Michaelszeng/nRF7002DK-UART-Rx"&gt;github.com/.../nRF7002DK-UART-Rx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: uart1 TX not working on nRF7002DK</title><link>https://devzone.nordicsemi.com/thread/441119?ContentTypeID=1</link><pubDate>Mon, 14 Aug 2023 10:49:01 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b0a9cec3-dec5-4e33-b93d-3e759945aeb3</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;I assumed you also deleted the build folder after doing this change?&lt;/p&gt;
&lt;p&gt;Also, can you try a different pin for TX?&lt;br /&gt;&lt;a href="https://github.com/nrfconnect/sdk-nrf/blob/v2.4.0/boards/arm/nrf7002dk_nrf5340/nrf5340_cpuapp_common-pinctrl.dtsi#L75"&gt;https://github.com/nrfconnect/sdk-nrf/blob/v2.4.0/boards/arm/nrf7002dk_nrf5340/nrf5340_cpuapp_common-pinctrl.dtsi#L75&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>