<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[YTM32Bx MCAL NVR Flash操作Demo]]></title><description><![CDATA[<p dir="auto">YTM32Bx系列的NVR Flash区域可用于存放用户特殊用途的数据，由于其操作的特殊性，故在云途MCAL Fls模块中不支持对NVR Flase的读、写、擦除操作（HCU NVR load key除外）。各个型号NVR区域的详细信息及操作指南，可参考各个型号RM以及《AN_0062_EFM_Application_Note》。</p>
<h1>MCAL的工程如何操作NVR Flash</h1>
<p dir="auto">在MCAL工程中，为满足客户操作NVR区域的需求，特编写Fls_Nvr.c/.h文件，用于支持用户操作NVR Flash。如下方压缩包所示：</p>
<p dir="auto"><a href="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/12/3656f007-0a9f-41ad-8441-9a9d92ded1ae.zip" rel="nofollow ugc">Fls_NvrDriver.zip</a></p>
<p dir="auto">用户可将上述两个文件添加至工程中，并根据添加的位置修改CMakeList文件，如下所示，下图示例中将上述文件添加至App/Fls_NvrDriver，并修改工程的CMakeList。<br />
<img src="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/12/caaa7ec1-1d83-4fdb-adde-6ddf8446102a.png" alt="ea857a9f-b8bb-4d35-b587-e7e68ae641c4-image.png" class=" img-fluid img-markdown" /></p>
<h1>NVR Flash操作注意事项</h1>
<h2>与MCAL Fls模块资源冲突问题</h2>
<p dir="auto">由于Fls 模块与NVR Flash操作均需使用EFM模块，因此在调用NVR Flash操作API时，应尽量避免与Fls模块的操作同时工作的问题。虽然在NVR Flash的API中判断了Fls模块是否处于BUSY状态有判断，但是Fls无法判断NVR Flash API是否正在被调用，因此如果两者同时操作EFM，容易导致操作失败。故在使用上需规避二者同时操作EFM。</p>
<h2>CUS NVR注意事项</h2>
<p dir="auto">向CUS NVR中指定位置写入数据可修改MCU的CUS KEY，可修改Flash写保护寄存器初始值，可开关MCU debug功能等，因此CUS NVR区域的写入操作需谨慎执行。各个型号CUS NVR功能及地址映射关系详见《AN_0062_EFM_Application_Note》。在测试CUS NVR写入时，需注意：</p>
<ul>
<li>
<h3>CUS KEY</h3>
</li>
</ul>
<p dir="auto">YTM32B1MD1、YTM32B1MD2、YTM32B1MC0、YTM32B1ME1、YTM32B1HA0的CUS KEY均可通过向CUS NVR中的0-7字节写入数据来更改。因此若用户需要CUS KEY, 可向CUS NVR前8字节中24bit key以及0x5A5A5A5A。修改CUS KEY后，MCU默认的KEY失效，用户需自行记录更新后的KEY，并在每次调用相关接口时使用更新后的KEY，若KEY遗失，则CUS NVR读、写、擦除操作，HCU NVR擦除均无法再执行。</p>
<ul>
<li>
<h3>Debug使能及禁用</h3>
</li>
</ul>
<p dir="auto">通过向CUS NVR指定位置写入0x5A5A5A5A,0x5A5A5A5A，可实现MCU debug功能禁用，debug功能禁用后，只能通过擦除CUS NVR中指定位置写入的值，才能再次启用MCU debug功能。因此在禁用MCU debug功能前，请确保CUS NVR擦除代码可被有效调用。</p>
<ul>
<li>
<h3>YTM32B1HA0 CUS NVR注意事项</h3>
</li>
</ul>
<p dir="auto">YTM32B1HA0 CUS NVR的写入的最小长度为32字节，但是在disable debug或修改cus key时，其需要写入的数据长度仅为8字节。如下图所示：<br />
<img src="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/12/84a3c596-3a85-4a26-8172-0b7a7567c0c6.png" alt="78de7815-a857-4db1-8ba9-b33d23d814a8-image.png" class=" img-fluid img-markdown" /><br />
因此应用程序在执行上述功能时，为了不影响其他位置的数据，需要先读取CUS NVR中的数据，在读取结果的基础上修改对应位置的数据，最后再写入到CUS NVR中。<br />
如下所示代码为CUS NVR中禁用debug功能所示代码，代码中为不影响cus key及EFM PROT0/1初始值，先读取CUS NVR 0-32字节中的数据，然后修改8-15字节中的数据，然后擦除CUS NVR，并将数据再次写入到CUS NVR中。此示例中由于调用了Fls 擦除，因此对于32字节之后的数据，客户应视情况而定是否需要再次写入。</p>
<pre><code class="language-c">/*Disable Jlink or SWD debug when SW1 is pressed*/
        if(TRUE == Fls_CurNvrDebugDisEn)
        {
            /*read data*/
            TestResult = Fls_ReadCusNvr(0x10000000, Fls_ReadData, 32,Fls_TestCusKey);
            while(FLASH_E_OK != TestResult)
            {
                __asm("NOP");
            }

            /*Clear the register init value in customer nvr*/
            TestResult = Fls_EraseCusNvr(0x4dff32);
            while(FLASH_E_OK != TestResult)
            {
                __asm("NOP");
            }
            for(LoopCnt = 0;LoopCnt &lt; 32;LoopCnt++)
            {
              Fls_WriteData[LoopCnt] = Fls_ReadData[LoopCnt];
            }

            *((uint32 *)&amp;Fls_WriteData[8]) = 0x5A5A5A5A;
            *((uint32 *)&amp;Fls_WriteData[12]) = 0x5A5A5A5A;
            TestResult = Fls_WriteCusNvr(0x10000000, Fls_WriteData, 32,0x4dff32);

            if(FLASH_E_OK == TestResult)
            {
                /*test code nothing to do*/
            }
            else 
            {
                /*test code nothing to do*/
            }
            Fls_CurNvrDebugDisEn = FALSE;
        }
</code></pre>
<h2>OTP NVR注意事项</h2>
<p dir="auto">OTP NVR的最末尾8字节(YTM32B1HA01为最末尾32字节)为OTA使用，用户禁止写入。</p>
<h1>各个型号NVR Flash操作Demo</h1>
<p dir="auto">各个型号Demo工程如下所示：</p>
<ul>
<li>YTM32B1HA0<br />
<a href="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/12/0df25d07-eb87-4b73-86c1-9119add114f1.zip" rel="nofollow ugc">Fls_HA0NvrDemo.zip</a></li>
<li>YTM32B1MC0<br />
<a href="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/12/a17ec527-2317-4c63-b5d9-87e514ad566d.zip" rel="nofollow ugc">Fls_MC0NvrDemo.zip</a></li>
<li>YTM32B1MD1<br />
<a href="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/12/bd3e626f-6b74-42ab-8022-f8f2993cb17c.zip" rel="nofollow ugc">Fls_MD1NvrDemo.zip</a></li>
<li>YTM32B1MD2<br />
<a href="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/12/59d90d43-7286-494d-aac6-943d8ab9c297.zip" rel="nofollow ugc">Fls_MD2NvrDemo.zip</a></li>
<li>YTM32B1ME0<br />
<a href="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/12/722cd74d-ff28-49f2-a7df-d475cea804b0.zip" rel="nofollow ugc">Fls_ME0NvrDemo.zip</a></li>
<li>YTM32B1ME1<br />
<a href="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/12/d3fab62a-dfbb-4efa-bad4-b60b4066fb8b.zip" rel="nofollow ugc">Fls_ME1NvrDemo.zip</a></li>
</ul>
]]></description><link>https://forum.ytmicro.com/topic/2110/ytm32bx-mcal-nvr-flash操作demo</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Jul 2026 18:22:46 GMT</lastBuildDate><atom:link href="https://forum.ytmicro.com/topic/2110.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Jul 2026 08:10:26 GMT</pubDate><ttl>60</ttl></channel></rss>