<?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>54LM20A sQSPI behavior is different with 54L15</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/127225/54lm20a-sqspi-behavior-is-different-with-54l15</link><description>Hello DevZone, 
 I have wrote a standard Zephyr display driver for one customer, I used sQSPI and Zephyr MSPI API. 
 I finished the development, but the QSPI (1-1-4 mode) plot on 54LM20 is different from that on 54L15. The code is same. 
 
 display requirement</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 01 Apr 2026 02:53:46 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/127225/54lm20a-sqspi-behavior-is-different-with-54l15" /><item><title>RE: 54LM20A sQSPI behavior is different with 54L15</title><link>https://devzone.nordicsemi.com/thread/564339?ContentTypeID=1</link><pubDate>Wed, 01 Apr 2026 02:53:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:99f9b1b9-3e82-4e2a-a2f3-e1627857c3ee</guid><dc:creator>Jayant Tang</dc:creator><description>&lt;p&gt;Both 54L15 and 54LM20 contains `bias-pull-up` in group2:&lt;br /&gt;&lt;br /&gt;54L15:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;amp;pinctrl {
	sqspi_default: sqspi_default {
		group1 {
			psels = &amp;lt;NRF_PSEL(SDP_MSPI_SCK, 2, 1)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_CS0, 2, 5)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ0, 2, 2)&amp;gt;;
			nordic,drive-mode = &amp;lt;NRF_DRIVE_E0E1&amp;gt;;
		};
		group2 {
			psels = &amp;lt;NRF_PSEL(SDP_MSPI_DQ1, 2, 4)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ2, 2, 3)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ3, 2, 0)&amp;gt;;
			nordic,drive-mode = &amp;lt;NRF_DRIVE_E0E1&amp;gt;;
			bias-pull-up;
		};
	};

	sqspi_sleep: sqspi_sleep {
		group1 {
			low-power-enable;
			psels = &amp;lt;NRF_PSEL(SDP_MSPI_SCK, 2, 1)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_CS0, 2, 5)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ0, 2, 2)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ1, 2, 4)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ2, 2, 3)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ3, 2, 0)&amp;gt;;
		};
	};
};&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;54LM20:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;amp;pinctrl {
	sqspi_default: sqspi_default {
		group1 {
			psels = &amp;lt;NRF_PSEL(SDP_MSPI_SCK, 2, 1)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_CS0, 2, 5)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ0, 2, 2)&amp;gt;;
			nordic,drive-mode = &amp;lt;NRF_DRIVE_E0E1&amp;gt;;
		};
		group2 {
			psels = &amp;lt;NRF_PSEL(SDP_MSPI_DQ1, 2, 4)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ2, 2, 3)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ3, 2, 0)&amp;gt;;
			nordic,drive-mode = &amp;lt;NRF_DRIVE_E0E1&amp;gt;;
			bias-pull-up;
		};
	};

	sqspi_sleep: sqspi_sleep {
		group1 {
			low-power-enable;
			psels = &amp;lt;NRF_PSEL(SDP_MSPI_SCK, 2, 1)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_CS0, 2, 5)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ0, 2, 2)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ1, 2, 4)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ2, 2, 3)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ3, 2, 0)&amp;gt;;
		};
	};&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: 54LM20A sQSPI behavior is different with 54L15</title><link>https://devzone.nordicsemi.com/thread/563943?ContentTypeID=1</link><pubDate>Tue, 24 Mar 2026 11:57:29 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7c32e910-3ddc-4ad5-b8fd-74f7e2d783ac</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;Hello again,&lt;/p&gt;
&lt;p&gt;Can you confirm that you have bias-pull-ups enabled on the pins in question for the nRF54LM20A?&lt;/p&gt;
&lt;p&gt;Ref for instance:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;	sqspi_default: sqspi_default {
		group1 {
			psels = &amp;lt;NRF_PSEL(SDP_MSPI_SCK, 2, 1)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_CS0, 2, 5)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ0, 2, 2)&amp;gt;;
			nordic,drive-mode = &amp;lt;NRF_DRIVE_E0E1&amp;gt;;
		};
		group2 {
			psels = &amp;lt;NRF_PSEL(SDP_MSPI_DQ1, 2, 4)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ2, 2, 3)&amp;gt;,
				&amp;lt;NRF_PSEL(SDP_MSPI_DQ3, 2, 0)&amp;gt;;
			nordic,drive-mode = &amp;lt;NRF_DRIVE_E0E1&amp;gt;;
			bias-pull-up;
		};
	};&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: 54LM20A sQSPI behavior is different with 54L15</title><link>https://devzone.nordicsemi.com/thread/563935?ContentTypeID=1</link><pubDate>Tue, 24 Mar 2026 10:06:16 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:eb4504e0-c862-416d-9fcf-9de07b5c060a</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;Thank you for the update, I am in contact with the team now.&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: 54LM20A sQSPI behavior is different with 54L15</title><link>https://devzone.nordicsemi.com/thread/563921?ContentTypeID=1</link><pubDate>Tue, 24 Mar 2026 07:17:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:39cdedfa-90ba-497f-a65f-648a1d373154</guid><dc:creator>Jayant Tang</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I got the 54LM20DK v0.7.0, the result is same as 54LM20DK v0.3.4.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:367px;max-width:266px;" height="367" src="https://devzone.nordicsemi.com/resized-image/__size/532x734/__key/communityserver-discussions-components-files/4/pastedimage1774336437185v1.png" width="266" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;The NCS version is v3.2.4.&lt;/p&gt;
&lt;p&gt;Now this doesn&amp;#39;t affect the normal qspi communication. It is just different with 54l15.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m not sure if there is any specification about this. Just let you know.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: 54LM20A sQSPI behavior is different with 54L15</title><link>https://devzone.nordicsemi.com/thread/562649?ContentTypeID=1</link><pubDate>Thu, 05 Mar 2026 13:41:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:676a3fe9-3558-467f-9989-1caacc6a2099</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;Do let me know if you see any issues on the v0.5.4 DK with engineering B.&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: 54LM20A sQSPI behavior is different with 54L15</title><link>https://devzone.nordicsemi.com/thread/562494?ContentTypeID=1</link><pubDate>Wed, 04 Mar 2026 03:27:51 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a39262db-8d5a-432f-9481-c576055227e0</guid><dc:creator>Jayant Tang</dc:creator><description>&lt;p&gt;I don&amp;#39;t have a v0.5.4 DK now. I&amp;#39;ll test that when I get this. Thanks.&lt;br /&gt;&lt;br /&gt;By the way, due to the customer&amp;#39;s requirement, I change the repo to private.&lt;br /&gt;&lt;br /&gt;So I paste some of the code here in case you need it.:&lt;br /&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;int a6ng_bus_write(const struct device *dev, const uint8_t *buf, size_t size)
{
    struct a6ng_data *data = dev-&amp;gt;data;
    const struct a6ng_config *config = dev-&amp;gt;config;

    __ASSERT(buf != NULL, &amp;quot;Data pointer is NULL&amp;quot;);

    if (size &amp;gt; config-&amp;gt;framebuffer_size) {
        LOG_ERR(&amp;quot;Data size %d exceeds framebuffer size %d&amp;quot;, size, config-&amp;gt;framebuffer_size);
        return -EINVAL;
    }

    if (size % (config-&amp;gt;width * config-&amp;gt;gray_scale_bits / 8) != 0) {
        LOG_ERR(&amp;quot;Data size %d is not a multiple of the screen width %d&amp;quot;, size, config-&amp;gt;width);
        return -EINVAL;
    }

#if IS_ENABLED(CONFIG_A6NG_LINE_MODE_SPI)
    data-&amp;gt;pixels_packet.cmd = (A6NG_OPCODE_SPI_DISPLAY_WRITE &amp;amp; 0xff000000) &amp;gt;&amp;gt; 24;
    data-&amp;gt;pixels_packet.address = A6NG_OPCODE_SPI_DISPLAY_WRITE &amp;amp; 0x00ffffff;
    data-&amp;gt;pixels_xfer.timeout = 2500; // 640 * 480 * 8 bits / 1Mbps = 2457.6 ms, add some margin
#elif IS_ENABLED(CONFIG_A6NG_LINE_MODE_QSPI)
    data-&amp;gt;pixels_packet.cmd = (A6NG_OPCODE_QSPI_DISPLAY_WRITE &amp;amp; 0xff000000) &amp;gt;&amp;gt; 24;
    data-&amp;gt;pixels_packet.address = A6NG_OPCODE_QSPI_DISPLAY_WRITE &amp;amp; 0x00ffffff;
    data-&amp;gt;pixels_xfer.timeout = 700; // 640 * 480 * 8 bits / (4 * 1Mbps) = 614.4 ms, add some margin
#else
#error &amp;quot;Please select line mode for A6NG display&amp;quot;
#endif

    data-&amp;gt;pixels_packet.dir = MSPI_TX;
    data-&amp;gt;pixels_packet.num_bytes = size;
    data-&amp;gt;pixels_packet.data_buf = (uint8_t *)buf;
    data-&amp;gt;pixels_packet.cb_mask = MSPI_BUS_NO_CB;

    data-&amp;gt;pixels_xfer.packets = &amp;amp;data-&amp;gt;pixels_packet;
    data-&amp;gt;pixels_xfer.num_packet = 1;

#if IS_ENABLED(CONFIG_A6NG_LINE_MODE_SPI)
    data-&amp;gt;mspi_dev_cfg.io_mode = MSPI_IO_MODE_SINGLE; // 1-1-1 (standard SPI)
#elif IS_ENABLED(CONFIG_A6NG_LINE_MODE_QSPI)
    data-&amp;gt;mspi_dev_cfg.io_mode = MSPI_IO_MODE_QUAD_1_1_4; // 1-1-4 (QSPI)
#else
#error &amp;quot;Please select line mode for A6NG display&amp;quot;
#endif
    mspi_dev_config(config-&amp;gt;bus, &amp;amp;config-&amp;gt;mspi_id, MSPI_DEVICE_CONFIG_IO_MODE, &amp;amp;data-&amp;gt;mspi_dev_cfg);

    return mspi_transceive(config-&amp;gt;bus, &amp;amp;config-&amp;gt;mspi_id, &amp;amp;data-&amp;gt;pixels_xfer);
}

void a6ng_set_default_data(const struct device *dev)
{
    const struct a6ng_config *config = dev-&amp;gt;config;
    struct a6ng_data *data = dev-&amp;gt;data;

    // prepare default MSPI configuration
    struct mspi_dev_cfg cfg = {
        .ce_num = config-&amp;gt;ce_num,
        .freq = config-&amp;gt;frequency,
        .io_mode = MSPI_IO_MODE_SINGLE,       // 1-1-1 (standard SPI)
        .data_rate = MSPI_DATA_RATE_SINGLE,   // SDR
        .cpp = MSPI_CPP_MODE_0,               // CPOL = 0, CPHA = 0
        .endian = MSPI_XFER_BIG_ENDIAN,       // big endian
        .ce_polarity = MSPI_CE_ACTIVE_LOW,    // active low
        .dqs_enable = false,   
    };
    memcpy(&amp;amp;data-&amp;gt;mspi_dev_cfg, &amp;amp;cfg, sizeof(struct mspi_dev_cfg));

    // Configure MSPI bus
    mspi_dev_config(config-&amp;gt;bus, &amp;amp;config-&amp;gt;mspi_id, MSPI_DEVICE_CONFIG_ALL, &amp;amp;data-&amp;gt;mspi_dev_cfg);

    // prepare default transfer configuration for register access
    struct mspi_xfer reg_xfer = {
        .async = false,
        .xfer_mode = MSPI_PIO,
        .tx_dummy = 0,
        .rx_dummy = 0,
        .cmd_length = 1,   // OPCODE [7:0]
        .addr_length = 1,  // Register address 
        .hold_ce = false, 
        .ce_sw_ctrl.gpio.port = config-&amp;gt;mspi_id.ce.port,
        .ce_sw_ctrl.gpio.pin = config-&amp;gt;mspi_id.ce.pin,
        .ce_sw_ctrl.gpio.dt_flags = config-&amp;gt;mspi_id.ce.dt_flags,
        .ce_sw_ctrl.delay = 3, 
        .priority = MSPI_XFER_PRIORITY_HIGH,
        .packets = &amp;amp;(data-&amp;gt;reg_packet),
        .num_packet = 1,
        .timeout = 5,
    };
    memcpy(&amp;amp;data-&amp;gt;reg_xfer, &amp;amp;reg_xfer, sizeof(struct mspi_xfer));

    // prepare default transfer configuration for pixel data access
    struct mspi_xfer display_xfer = {
        .async = false,
        .xfer_mode = MSPI_PIO,
        .tx_dummy = 0,
        .rx_dummy = 0,
        .cmd_length = 1,  // OPCODE [31:24]
        .addr_length = 3, // OPCODE [23:0]
        .hold_ce = false,
        .ce_sw_ctrl.gpio.port = config-&amp;gt;mspi_id.ce.port,
        .ce_sw_ctrl.gpio.pin = config-&amp;gt;mspi_id.ce.pin,
        .ce_sw_ctrl.gpio.dt_flags = config-&amp;gt;mspi_id.ce.dt_flags,
        .ce_sw_ctrl.delay = 3, 
        .priority = MSPI_XFER_PRIORITY_HIGH,
        .packets = &amp;amp;(data-&amp;gt;pixels_packet),
        .num_packet = 1,
        .timeout = 1000, // display data transfer may take longer time
    };
    memcpy(&amp;amp;data-&amp;gt;pixels_xfer, &amp;amp;display_xfer, sizeof(struct mspi_xfer));


}

&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: 54LM20A sQSPI behavior is different with 54L15</title><link>https://devzone.nordicsemi.com/thread/562316?ContentTypeID=1</link><pubDate>Mon, 02 Mar 2026 12:19:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e81bab13-8c76-4115-9a5b-740c20d8c2a4</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;As Pål writes, you need engineering B (v0.5.4 DK), ref:&lt;br /&gt;&amp;quot;Added experimental support for nRF54LM20A Engineering B.&amp;quot;&lt;br /&gt;&lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/releases/release-notes-3.2.1.html#highlights"&gt;https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/releases/release-notes-3.2.1.html#highlights&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><item><title>RE: 54LM20A sQSPI behavior is different with 54L15</title><link>https://devzone.nordicsemi.com/thread/562291?ContentTypeID=1</link><pubDate>Mon, 02 Mar 2026 09:30:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bd172aa0-71cb-47bf-9c17-abc0bc56531b</guid><dc:creator>PaKa</dc:creator><description>&lt;p&gt;Did you test again with a new nRF54LM20 DK? 0.5.4 for instance?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>