<?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>nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/121915/nrf54l-series-i2s-mclk-divider</link><description>Hi ... have code that outputs I2S in master mode. The slave, a NAU8822 device requires Master Clock Source between 8 and 33MHz. 
 The 54L MCLK pin is duplicating the BCLK frequency, currently 1,2MHz odd. Datasheet for 54L Series, page 324 says .. 
 
</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 17 Feb 2026 14:16:59 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/121915/nrf54l-series-i2s-mclk-divider" /><item><title>RE: nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/thread/561366?ContentTypeID=1</link><pubDate>Tue, 17 Feb 2026 14:16:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:76da2a8f-cf33-4b79-9c2c-d11b7492e72d</guid><dc:creator>Elfving</dc:creator><description>&lt;p&gt;Hi Stefan, I have taken over this case from Hieu for a bit.&lt;/p&gt;
[quote user="Stefan Schmidt"]&lt;p&gt;So I am not going to prepare a pull request.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;[/quote]
&lt;p&gt;That is fine. I&amp;#39;ll see if I can create a job for this on our backlog here.&amp;nbsp;Thanks for the suggestion!&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Elfving&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/thread/561058?ContentTypeID=1</link><pubDate>Thu, 12 Feb 2026 21:32:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4563adf4-1af1-4a81-a07d-4dd595175dbc</guid><dc:creator>Stefan Schmidt</dc:creator><description>&lt;p&gt;Hi Hieu,&lt;/p&gt;
&lt;p&gt;I had a closer look at the driver in&amp;nbsp;nrfx_i2s.c, but I do not understand the logic of how the divider values are calculated. Furthermore I am only using Zephyr, but this driver is most likely also used for baremetal configurations. So I do not understand how an addition to a struct which is used by both approaches would be intitialized in the baremetal world (will the element be set to zero).&lt;/p&gt;
&lt;p&gt;So I am not going to prepare a pull request.&lt;/p&gt;
&lt;p&gt;Best regards&lt;/p&gt;
&lt;p&gt;Stefan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/thread/560598?ContentTypeID=1</link><pubDate>Sun, 08 Feb 2026 16:31:18 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:06e92bf1-dde7-4188-b5a0-a4c8702b1025</guid><dc:creator>Hieu</dc:creator><description>&lt;p&gt;Hi Stefan,&lt;/p&gt;
&lt;p&gt;My apology for the late follow up.&lt;/p&gt;
&lt;p&gt;That is an interesting idea. Would you like to make a pull request for it?&lt;br /&gt;There are some guidelines, but you can just get the implementation out and I can help you adjust things as needed.&lt;/p&gt;
&lt;p&gt;If you would like to stop just at sharing the idea, that is of course also welcomed. I will create a task on our backlog.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Hieu&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/thread/560196?ContentTypeID=1</link><pubDate>Tue, 03 Feb 2026 09:16:19 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:91997942-ef5f-4e28-8994-47c1446c0a39</guid><dc:creator>Stefan Schmidt</dc:creator><description>&lt;p&gt;Mmmh, nrfx_i2s.c is not a Zephyr driver. So the&amp;nbsp;nrfx_i2s_clk_params_t might be extended by a &amp;quot;requested_mck&amp;quot; field which could be filled by the Zephyr driver and kept at/set to 0 for the non-Zepyhr use case&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/thread/560189?ContentTypeID=1</link><pubDate>Tue, 03 Feb 2026 08:43:34 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5c145aa1-be21-43b8-b7a9-8d6fe0fe1b71</guid><dc:creator>Stefan Schmidt</dc:creator><description>&lt;p&gt;Hello Hieu,&lt;/p&gt;
&lt;p&gt;I am facing a similar issue with a nRF54L15 and a TLV320DAC3100: I also need a MCK which is a lot higher than the BCK.&lt;/p&gt;
&lt;p&gt;I do not think that the Zephyr API has to be changed: An extension in the devicetree bindings only for the Nordic SOC would be sufficient. For example, if a MCK clock is set in the devicetree for a Nordic I2S device (e.g. in an overlay) the automatic calculation of the requested mck could be skipped (see function&amp;nbsp;nrfx_i2s_prescalers_calc in nrfx/drivers/src/nrfx_i2s.c)&lt;/p&gt;
&lt;p&gt;Best regards&lt;/p&gt;
&lt;p&gt;Stefan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/thread/538471?ContentTypeID=1</link><pubDate>Fri, 06 Jun 2025 18:39:51 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d7db18c1-5ef8-47f6-8638-3fe930037644</guid><dc:creator>Hieu</dc:creator><description>&lt;p&gt;I am happy to help. I will keep this case opened then. Please feel free to follow up whenever it is convenient for you.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/thread/538366?ContentTypeID=1</link><pubDate>Fri, 06 Jun 2025 08:17:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:043ee66a-e29b-493b-b8b5-86f3fbd80ef1</guid><dc:creator>Jasper_Golden</dc:creator><description>&lt;p&gt;Thank you for the detailed response Hieu.&amp;nbsp; &amp;nbsp; I will need to look into the details you have mentioned.&amp;nbsp; &amp;nbsp; Will do so when I have time for this.&amp;nbsp; The project will need to do without i2s for now unfortunately.&amp;nbsp; &amp;nbsp; Thank you once again.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/thread/538134?ContentTypeID=1</link><pubDate>Wed, 04 Jun 2025 22:24:42 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4c267590-0a6c-4b77-be42-ac165dbdf365</guid><dc:creator>Hieu</dc:creator><description>&lt;p&gt;Hi Brian,&lt;/p&gt;
&lt;p&gt;My apology. I was optimistic with the driver&amp;#39;s capability. While it indeed&amp;nbsp;automatically calculates an I2S configuration based on the i2s_config struct, it doesn&amp;#39;t take into account restriction such as the&amp;nbsp;NAU8822&amp;#39;s MCK requirement.&lt;/p&gt;
&lt;p&gt;I am not certain yet whether I should file an internal ticket about this&amp;nbsp;limitation. It&amp;nbsp;originates from the design of the Zephyr driver, which doesn&amp;#39;t take in MCK frequency as an input at all. There is little we can do about that, as changing Zephyr APIs affect all&amp;nbsp;chip vendors, thus isn&amp;#39;t something we from Nordic can&amp;nbsp;just unilaterally do.&lt;/p&gt;
&lt;p&gt;To proceed, we have two options, which unfortunately both require some level of effort.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. Use &lt;a href="https://docs.nordicsemi.com/bundle/nrfx-apis-3.0.2/page/index.html"&gt;the nrfx driver&lt;/a&gt; instead to work with I2S.&lt;br /&gt;I don&amp;#39;t have anything to add for option 1.&amp;nbsp;Unfortunately, there isn&amp;#39;t a sample, beyond &lt;a href="https://github.com/nrfconnect/sdk-zephyr/blob/v4.0.99-ncs1-1/drivers/i2s/i2s_nrfx.c"&gt;the implementation of the Zephyr I2S driver itself&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;2. Hack the Zephyr I2S driver a little. &lt;br /&gt;Considering what I have investigated, this is likely&amp;nbsp;feasible and simpler than option 1.&lt;br /&gt;However, please keep in mind that this is nonetheless modifying existing design, and there can be unexpected consequences.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;For this option,&amp;nbsp;&lt;span style="font-family:inherit;"&gt;we need to look into the current implementation.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The configuration isn&amp;#39;t set to the peripheral with the &lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;i2s_configure()&lt;/span&gt; function. That function only stores the configuration in a structure in the driver. This stored configuration is then set to the peripheral &lt;em&gt;every time&lt;/em&gt; &lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;i2s_trigger()&lt;/span&gt; is called.&lt;/p&gt;
&lt;p&gt;Therefore, we need to add&amp;nbsp;a new API to override only the clock related fields of the stored configurations. Here are a few points to note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The stored configuration is a&amp;nbsp;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;nrfx_i2s_config_t&lt;/span&gt; structure&lt;/li&gt;
&lt;li&gt;Two copies of that structure are&amp;nbsp;stored. One for each direction of I2S.&lt;br /&gt;Ref:&amp;nbsp;&lt;a href="https://github.com/nrfconnect/sdk-zephyr/blob/v4.0.99-ncs1-1/drivers/i2s/i2s_nrfx.c#L558-L571"&gt;https://github.com/nrfconnect/sdk-zephyr/blob/v4.0.99-ncs1-1/drivers/i2s/i2s_nrfx.c#L558-L571&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The relevant fields are&amp;nbsp;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;mck_setup&lt;/span&gt; and &lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;ratio&lt;/span&gt;&lt;br /&gt;Ref:&amp;nbsp;&lt;a href="https://docs.nordicsemi.com/bundle/nrfx-apis-3.0.2/page/structnrfx_i2s_config_t.html"&gt;https://docs.nordicsemi.com/bundle/nrfx-apis-3.0.2/page/structnrfx_i2s_config_t.html&lt;/a&gt;&lt;br /&gt;or in code:&amp;nbsp;&lt;br /&gt;&lt;a href="https://github.com/zephyrproject-rtos/hal_nordic/blob/nrfx-3.9.0/nrfx/drivers/include/nrfx_i2s.h#L76-L77"&gt;&amp;lt;SDK&amp;gt;\modules\hal\nordic\nrfx\drivers\include\nrfx_i2s.h&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/zephyrproject-rtos/hal_nordic/blob/nrfx-3.9.0/nrfx/hal/nrf_i2s.h"&gt;&amp;lt;SDK&amp;gt;\modules\hal\nordic\nrfx\hal\nrf_i2s.h&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For simplicity, mck_setup can be calculated from ratio and LRCK, referring the original implementation of the driver here:&lt;br /&gt;&lt;a href="https://github.com/nrfconnect/sdk-zephyr/blob/v4.0.99-ncs1-1/drivers/i2s/i2s_nrfx.c#L80-L134"&gt;https://github.com/nrfconnect/sdk-zephyr/blob/v4.0.99-ncs1-1/drivers/i2s/i2s_nrfx.c#L80-L134&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My apologies, but I am unable to think of any easier approach.&lt;/p&gt;
&lt;p&gt;Hieu&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/thread/537938?ContentTypeID=1</link><pubDate>Tue, 03 Jun 2025 18:52:28 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0b639cb3-4a90-4200-96f0-ac4ad573bd8a</guid><dc:creator>Jasper_Golden</dc:creator><description>&lt;p&gt;Hi Hieu&lt;/p&gt;
&lt;p&gt;Firstly, the &amp;#39;i2c&amp;#39; referenced in my question is a typo .. indeed it was meant to be i2s. &lt;br /&gt;Your response does not answer my question I&amp;#39;m afraid. Let me explain ..&lt;br /&gt; &lt;br /&gt;So my code has the following bit of code .. straight from Nordic Zephyr example. Those that exist all seem to follow the exact same setup.&lt;/p&gt;
&lt;p&gt;/* Configure I2S stream */&lt;br /&gt;i2s_cfg.word_size = 16U;&lt;br /&gt;i2s_cfg.channels = 2U;&lt;br /&gt;i2s_cfg.format = I2S_FMT_DATA_FORMAT_I2S;&lt;br /&gt;i2s_cfg.frame_clk_freq = 44100;&lt;br /&gt;i2s_cfg.block_size = BLOCK_SIZE;&lt;br /&gt;i2s_cfg.timeout = 2000;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;This code produces an approx. 44100Hz LR Clock a expected. The word size being 16 bits results in a clock of approx. 1,38MHz.&amp;nbsp;&amp;nbsp;&lt;br /&gt;All as expected. But Master Clock pin output still the same frequency as the bit clock pin output.&lt;/p&gt;
&lt;p&gt;Regards the response pointing out &amp;#39;word_size&amp;quot; and &amp;quot;frame_clk_freq&amp;quot; &lt;br /&gt;The WORD Size referenced is 16 bits and frame is 44,1KHz. These variables produce correct bit pattern output.&lt;/p&gt;
&lt;p&gt;Your response - &amp;quot;You just need to configure those fields to the appropriate values for your I2S device, and the driver will calculate and configure the ratio under the hood&amp;quot;&lt;/p&gt;
&lt;p&gt;Well no .. not for Master Clock. I need a multiple of the 1,38MHz clocked out of the MASTER CLOCK pin. This is what the Master Clock pin is for.&amp;nbsp; &amp;nbsp;What am I missing?&lt;/p&gt;
&lt;p&gt;Thank you&lt;/p&gt;
&lt;p&gt;Brian&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf54L Series I2S MCLK divider?</title><link>https://devzone.nordicsemi.com/thread/537749?ContentTypeID=1</link><pubDate>Mon, 02 Jun 2025 21:01:19 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5912fe8a-b620-4985-8337-6f9d6c4aa4bc</guid><dc:creator>Hieu</dc:creator><description>&lt;p&gt;Hi Brian,&lt;/p&gt;
&lt;p&gt;I think you are using the Zephyr I2S driver together&amp;nbsp;and the&amp;nbsp;&lt;a href="https://docs.nordicsemi.com/bundle/zephyr-apis-3.0.2/page/structi2s_config.html"&gt;i2s_config&lt;/a&gt;&amp;nbsp;struct, rather than i2c, right?&lt;/p&gt;
&lt;p&gt;The Zephyr I2S driver is several layers of abstraction higher than the registers you are referring from the datasheet. With the Zephyr I2S driver, you will care about the two fields of the i2s_config struct:&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&lt;a href="https://docs.nordicsemi.com/bundle/zephyr-apis-3.0.2/page/structi2s_config.html#ab5b0556fcd113c6c645e265af4846b45"&gt;frame_clk_freq&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&lt;a href="https://docs.nordicsemi.com/bundle/zephyr-apis-3.0.2/page/structi2s_config.html#a5a38a75f0b4a3356ed85495fb45d0cd2"&gt;word_size&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You just need to configure those fields to the appropriate values for your I2S&amp;nbsp;device, and the driver will calculate and configure the ratio under the hood.&lt;/p&gt;
&lt;p&gt;For reference, the function that does the conversion is:&amp;nbsp;&lt;a href="https://github.com/nrfconnect/sdk-zephyr/blob/v4.0.99-ncs1-1/drivers/i2s/i2s_nrfx.c#L59-L188"&gt;sdk-zephyr/drivers/i2s/i2s_nrfx.c at v4.0.99-ncs1-1 · nrfconnect/sdk-zephyr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hieu&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>