<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic K32W061/QN9090/JN5189 Overview of lessons learned in Wireless MCU</title>
    <link>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/1767488#M16089</link>
    <description>&lt;P&gt;This isn't a question but a topic where I want to share info we learned when working on the K32W041 and that we want to share with other users. Please add more info in the answers to this thread so we all can learn.&lt;/P&gt;&lt;P&gt;1) There is a whole series of SOMs with the same core. Switching should be easy.&lt;BR /&gt;NXP acquired several manufacturers of wireless SOMs and is integrating those product lines into a series of SOMs with very different product numbers but an identical core and only differing in peripherals.&lt;BR /&gt;K32W041 / K32W061 Zigbee + Bluetooth, NFC for the K32W061. Formerly Freescale Kinetis&amp;nbsp;&lt;BR /&gt;JN5188(T) / JN5189(T) Zigbee, NFC for the 'T' version. Formerly Jennic&lt;BR /&gt;QN9030(T) / QN9090(T) Bluetooth, NFC for the 'T' version.&lt;BR /&gt;These all have different datasheet documents, but the SDK is almost identical and suggest easy transition when desired.&lt;/P&gt;&lt;P&gt;2) First radio transmission is slow without temperature setting&lt;BR /&gt;Our device powers down very often, on waking up, the first (and often only) radio transmission took 80ms. Simply setting the temperature before calling the radio fixes this. Before the first radio transmission there is some calibration done, when the temperature is not set, this calibration takes way longer since no previous stored calibration value can be used.&lt;/P&gt;&lt;P&gt;3) RAM contents are corrupted after a reset&lt;BR /&gt;A hardware reset also resets the RAM voltage regulators, as a result, the RAM contents are destroyed after a hardware reset. This was unexpected and differs from many other processors. It makes it more difficult to have data survive a reset like in a firmware update. SDK 2.6.10 introduced the function RESET_ArmReset which resets fewer hardware modules and so retains RAM. All hardware resets, like watchdog and unhandled exceptions, still corrupt RAM.&lt;/P&gt;&lt;P&gt;4) ADC always references 3.60V&lt;BR /&gt;Not really a problem, but can have implications for your hardware design. We use a Lithium battery as power supply and the 3.65V of a new battery will be capped reported as 3.60V&lt;/P&gt;&lt;P&gt;5) Brown-out detection can't reset the chip&lt;BR /&gt;The brown-out detection can be configured to trigger an interrupt, but not to reset the chip.&lt;/P&gt;&lt;P&gt;6) Older models can provide missing documentation&lt;BR /&gt;The K32W041 SDK lacks documentation on how to use the IEEE 802.15.4 stack, luckily there is JN-UG-3024. Last updated in 2016, but still way better than nothing.&lt;/P&gt;</description>
    <pubDate>Thu, 20 Jun 2024 12:42:47 GMT</pubDate>
    <dc:creator>ckielstra</dc:creator>
    <dc:date>2024-06-20T12:42:47Z</dc:date>
    <item>
      <title>K32W061/QN9090/JN5189 Overview of lessons learned</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/1767488#M16089</link>
      <description>&lt;P&gt;This isn't a question but a topic where I want to share info we learned when working on the K32W041 and that we want to share with other users. Please add more info in the answers to this thread so we all can learn.&lt;/P&gt;&lt;P&gt;1) There is a whole series of SOMs with the same core. Switching should be easy.&lt;BR /&gt;NXP acquired several manufacturers of wireless SOMs and is integrating those product lines into a series of SOMs with very different product numbers but an identical core and only differing in peripherals.&lt;BR /&gt;K32W041 / K32W061 Zigbee + Bluetooth, NFC for the K32W061. Formerly Freescale Kinetis&amp;nbsp;&lt;BR /&gt;JN5188(T) / JN5189(T) Zigbee, NFC for the 'T' version. Formerly Jennic&lt;BR /&gt;QN9030(T) / QN9090(T) Bluetooth, NFC for the 'T' version.&lt;BR /&gt;These all have different datasheet documents, but the SDK is almost identical and suggest easy transition when desired.&lt;/P&gt;&lt;P&gt;2) First radio transmission is slow without temperature setting&lt;BR /&gt;Our device powers down very often, on waking up, the first (and often only) radio transmission took 80ms. Simply setting the temperature before calling the radio fixes this. Before the first radio transmission there is some calibration done, when the temperature is not set, this calibration takes way longer since no previous stored calibration value can be used.&lt;/P&gt;&lt;P&gt;3) RAM contents are corrupted after a reset&lt;BR /&gt;A hardware reset also resets the RAM voltage regulators, as a result, the RAM contents are destroyed after a hardware reset. This was unexpected and differs from many other processors. It makes it more difficult to have data survive a reset like in a firmware update. SDK 2.6.10 introduced the function RESET_ArmReset which resets fewer hardware modules and so retains RAM. All hardware resets, like watchdog and unhandled exceptions, still corrupt RAM.&lt;/P&gt;&lt;P&gt;4) ADC always references 3.60V&lt;BR /&gt;Not really a problem, but can have implications for your hardware design. We use a Lithium battery as power supply and the 3.65V of a new battery will be capped reported as 3.60V&lt;/P&gt;&lt;P&gt;5) Brown-out detection can't reset the chip&lt;BR /&gt;The brown-out detection can be configured to trigger an interrupt, but not to reset the chip.&lt;/P&gt;&lt;P&gt;6) Older models can provide missing documentation&lt;BR /&gt;The K32W041 SDK lacks documentation on how to use the IEEE 802.15.4 stack, luckily there is JN-UG-3024. Last updated in 2016, but still way better than nothing.&lt;/P&gt;</description>
      <pubDate>Thu, 20 Jun 2024 12:42:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/1767488#M16089</guid>
      <dc:creator>ckielstra</dc:creator>
      <dc:date>2024-06-20T12:42:47Z</dc:date>
    </item>
    <item>
      <title>Re: K32W061/QN9090/JN5189 Overview of lessons learned</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/1774044#M16188</link>
      <description>&lt;P&gt;7) Real Time Clock (RTC) resets on a hardware reset&lt;/P&gt;&lt;P&gt;This means that time tracking is lost after a watchdog reset, or other hardware induced reset (software called processor reset is fine).&lt;/P&gt;</description>
      <pubDate>Wed, 13 Dec 2023 15:16:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/1774044#M16188</guid>
      <dc:creator>ckielstra</dc:creator>
      <dc:date>2023-12-13T15:16:14Z</dc:date>
    </item>
    <item>
      <title>Re: K32W061/QN9090/JN5189 Overview of lessons learned</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/1916221#M18430</link>
      <description>&lt;P&gt;&lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt; On reboot, the ROM code modifies RAM in the range 0x0400 7474 to 0x0400 7FFFF, i.e. the top 3kb in SRAM1 bank.&lt;/P&gt;&lt;P&gt;It's normal that the ROM code requires RAM stack space, but it would have been nice when this range was documented in the User Manual.&lt;/P&gt;&lt;P&gt;In our application we have some debugging data that we want to persist after a software reset. This worked like a charm, until a modification caused a change to the RAM layout, and then the data was garbled after a reset. It turned out that our NOINIT section overlapped the ROM-stack area. Now we know which data region to avoid, the solution was an easy change to the linker file.&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2024 13:45:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/1916221#M18430</guid>
      <dc:creator>ckielstra</dc:creator>
      <dc:date>2024-07-24T13:45:08Z</dc:date>
    </item>
    <item>
      <title>Re: K32W061/QN9090/JN5189 Overview of lessons learned</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/1932814#M18663</link>
      <description>&lt;P&gt;&lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt;&lt;LI-EMOJI id="lia_smiling-face-with-sunglasses" title=":smiling_face_with_sunglasses:"&gt;&lt;/LI-EMOJI&gt; Documentation error in &lt;SPAN&gt;K32W061 User Manual, section&amp;nbsp;27.7.1, &lt;/SPAN&gt;the section on software triggered ADC conversion&lt;BR /&gt;To avoid spurious ADC errors it says:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;2. Set the trigger source to an unused setting using the SEQ_CTRL[TRIGGER] bits. The&lt;BR /&gt;value 3, for example, is not used on this device.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;SPAN&gt;This is wrong since the value&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;3 is in use, see&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;section 17.1.3 of the K32W061/K32W041 Register Manual, for the TRIGGER field (bit 17 to 12).&lt;BR /&gt;&lt;/SPAN&gt;Not confirmed by NXP, but any value in the range 4 to 63 (6 bits field) seems good to me.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note that the NXP example programs use values of 0 and 2. These are bad examples. These settings work for those examples as the connected hardware sources are not enabled, but for a generic example, it would have been better to use a value that can never create a conflict, i.e. any value in the range 4 to 63.&lt;/P&gt;</description>
      <pubDate>Thu, 15 Aug 2024 08:39:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/1932814#M18663</guid>
      <dc:creator>ckielstra</dc:creator>
      <dc:date>2024-08-15T08:39:23Z</dc:date>
    </item>
    <item>
      <title>Re: K32W061/QN9090/JN5189 Overview of lessons learned</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/2002099#M19302</link>
      <description>&lt;P&gt;I just found this thread.&amp;nbsp; This is so useful thanks.&lt;BR /&gt;&lt;BR /&gt;I had the exact same question as you (is trigger a mask or value) and saw your other thread with the meaningless responses from NXP.&amp;nbsp; It looks like an AI bot rather than a person.&lt;BR /&gt;&lt;BR /&gt;I have found so many bugs in the SDK for these parts, sometimes they fix them privately to my company, sometimes they fix them in the public SDK after many months, sometimes they just say this or that peripheral is deprecated don't use it. (eg: I found a bug in the WTIMER0 driver and they say only WTIMER1 is supported).&lt;BR /&gt;&lt;BR /&gt;Do you have a github account so we can share fixes etc?&lt;/P&gt;</description>
      <pubDate>Tue, 26 Nov 2024 15:54:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/2002099#M19302</guid>
      <dc:creator>tcv_geo</dc:creator>
      <dc:date>2024-11-26T15:54:30Z</dc:date>
    </item>
    <item>
      <title>Re: K32W061/QN9090/JN5189 Overview of lessons learned</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/2002301#M19307</link>
      <description>&lt;P&gt;Update to 1)&lt;BR /&gt;A big difference between&amp;nbsp;&lt;SPAN&gt;K32W0x1 (Zigbee + Bluetooth),&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;JN518x (Zigbee) and the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;QN90x0 (Bluetooth) is the ROM code. These NXP processors differ here from competitors since a large part of the driver software is present in 128kb ROM. This explains why there are three different product lines, these have different driver code for the targeted protocol. The use of ROM code has advantages like cost reduction (ROM is cheaper than Flash) and smaller OTAP size. A disadvantage is that it's more difficult to fix bugs or add new features.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 26 Nov 2024 23:03:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/2002301#M19307</guid>
      <dc:creator>ckielstra</dc:creator>
      <dc:date>2024-11-26T23:03:34Z</dc:date>
    </item>
    <item>
      <title>Re: K32W061/QN9090/JN5189 Overview of lessons learned</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/2156105#M19984</link>
      <description>&lt;P&gt;&lt;STRONG&gt;8 Power Saving:&amp;nbsp;&lt;/STRONG&gt;Don't activate the 32MHz crystal on each wake-up&lt;/P&gt;&lt;P&gt;The default code will enable the 32MHz crystal on each wake-up from power-down. This is nice because it saves some time when starting the Radio communications. But, in our application, we often wake up from power-down to read a sensor and then return to power-down again. We only do a Radio transmission once every 150 wake-ups and were able to save 0.6uA on average.&lt;BR /&gt;&lt;BR /&gt;In the default code there is something like:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="c"&gt;power_config.pm_config = pd_cfg.sleep_cfg | PM_CFG_XTAL32M_AUTOSTART;&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;We removed the AUTOSTART&lt;BR /&gt;&lt;BR /&gt;And, when we enable the Radio, we added the following code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="c"&gt;    CLOCK_SetXtal32M_LDO();
    CLOCK_EnableClock(kCLOCK_Xtal32M);

    /* Enable the radio and restore the MAC settings. */
    vAppApiRestoreMacSettings();&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note: we first had different code for enabling the Radio by calling vRadio_EnableXTALInit(), but in a few devices this failed to start the crystal (stuck in a loop waiting for the crystal to start).&lt;/P&gt;</description>
      <pubDate>Thu, 21 Aug 2025 13:31:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/2156105#M19984</guid>
      <dc:creator>ckielstra</dc:creator>
      <dc:date>2025-08-21T13:31:32Z</dc:date>
    </item>
    <item>
      <title>Re: K32W061/QN9090/JN5189 Overview of lessons learned</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/2159797#M19992</link>
      <description>&lt;P&gt;&lt;STRONG&gt;9 Stuck on Radio crystal (32MHz)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;When the radio oscillator is not running, the NXP 802.15.4 library will simply hang (timeout is missing).&lt;/P&gt;&lt;P&gt;We don't know if there is a more elegant way to detect this condition, but we&amp;nbsp;use the watchdog timer. We set a flag before each operation and clear it afterwards, then if a watchdog timeout occurs with the flag set we know it is likely to be an issue with the radio library hanging, which could be an oscillator issue.&lt;/P&gt;</description>
      <pubDate>Thu, 28 Aug 2025 08:55:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/K32W061-QN9090-JN5189-Overview-of-lessons-learned/m-p/2159797#M19992</guid>
      <dc:creator>ckielstra</dc:creator>
      <dc:date>2025-08-28T08:55:47Z</dc:date>
    </item>
  </channel>
</rss>

