damiaa 发表于 2023-11-10 23:10

【MSPM0L1306 LaunchPad】 10 eeprom仿真A模型

<div class='showpostmsg'> 本帖最后由 damiaa 于 2023-11-19 12:35 编辑

<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="font-size:18px;"> 【MSPM0L1306 LaunchPad】 10 eeprom仿真A模型</span></div>

<div>&nbsp;</div>

<div><a href="https://bbs.eeworld.com.cn/thread-1259070-1-1.html">【MSPM0L1306 LaunchPad】 1 开箱+环境搭建+点灯</a></div>

<div><a href="https://bbs.eeworld.com.cn/thread-1259213-1-1.html">【MSPM0L1306 LaunchPad】 2 GUI Composer GUI 玩板子</a></div>

<div><a href="https://bbs.eeworld.com.cn/thread-1259215-1-1.html">【MSPM0L1306 LaunchPad】 3 Ti云开发环境</a></div>

<div><a href="https://bbs.eeworld.com.cn/thread-1259355-1-1.html">【MSPM0L1306 LaunchPad】 4 用MDK环境点灯</a></div>

<div><a href="https://bbs.eeworld.com.cn/thread-1259360-1-1.html">【MSPM0L1306 LaunchPad】 5用ccs theia 环境点灯</a></div>

<div><a href="https://bbs.eeworld.com.cn/thread-1259446-1-1.html">【MSPM0L1306 LaunchPad】 6 温度传感器实验</a></div>

<div><a href="https://bbs.eeworld.com.cn/thread-1259456-1-1.html">MSPM0L1306 LaunchPad】 7 UART基本实验(1)</a></div>

<div><a href="https://bbs.eeworld.com.cn/thread-1261200-1-1.html">【MSPM0L1306 LaunchPad】 8 定时器定时功能实验</a></div>

<div><a href="https://bbs.eeworld.com.cn/thread-1262698-1-1.html">【MSPM0L1306 LaunchPad】 9 flash的基本操作</a> 之后</div>

<div>&nbsp;</div>

<div>MSPM0L1306的flash可以做模拟eeprom,这里介绍具体介绍一下(eeprom仿真A模型)</div>

<div>&nbsp;</div>

<div>这里介绍几个概念,flash和eeprom是不相同的,flash可以字节写,但不能字节擦除,擦除最小单位为扇区,MSPM0L1306自然也一样。Eeprom可以字节写字节擦。</div>

<div>&nbsp;</div>

<div>那问题来了,怎么样模拟你字节擦字节写的类似操作呢。这里实际的是模拟一条记录的擦写和读。</div>

<div>这个模型实际上是空间换功能。两个扇区模拟一条记录的读写擦除。</div>

<div>&nbsp;</div>

<div>记录的情况如下:</div>

<div></div>

<div>上面的图可以看除,每条记录擦除后是活动记录标记已用记录也是记录结束也是0xffff 实际上擦除后所有区域都是0xffff</div>

<div>&nbsp;</div>

<div>记录开始会标记 一下活动标记为0x0000,然后记录写数据,写完后会再记录结束标记写0x0000,下一条记录写进去(记录结束标记标记完)的时候会把上一条记录的已用记录标记标为0x0000,说明和条记录已经用完,不是最后的记录了。下次就会从最后的记录开始。也可以根据记录的标记在下次上电的时候恢复记录。</div>

<div>&nbsp;</div>

<div>两个扇区的情况如下:</div>

<div></div>

<div></div>

<div>这个时候我们写完第n+1条记录后就擦除第一扇区</div>

<div></div>

<div></div>

<div>然后继续写第二扇区记录直到记录2n写完,就去写第一扇区的第一条记录,同时把第二扇区擦除。</div>

<div></div>

<div>这也就是为什么要两个扇区的原因。</div>

<div>&nbsp;</div>

<div>eeprom仿真A模型的原理就是这样。</div>

<div>&nbsp;</div>

<div>下面跑一下这个程序的应用</div>

<div>打开ccs 生成eeprom_emulation_type_a_test_LP_MSPM0L1306_nortos_ticlang项目如下:</div>

<div>
<div style="text-align: center;"></div>

<p>&nbsp;</p>
</div>

<div>&nbsp; &nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>这里主要关心eeprom_emulation_type_a.c&nbsp;eeprom_emulation_type_a.h main.c文件 前两个文件实现算法,main.c中进行调用。</div>

<div>main.c中主要是上电初始化,然后是数据改变后写,每改变一次写一次。中断中看数据。如果我们<span style="color:#27ae60;">restart后发现数据没变,证明是保存到flash了</span>。但因为调试<span style="color:#2ecc71;">不能加载flash去重新调试</span>。这样flash数据全部被调试器擦除了。</div>

<div>下面演示一下调试过程:</div>

<div>1,在Debug Project(.....)加载这个项目(这里会擦除所有flash空间 包括模拟eeprom部分 注意)。</div>

<div>
<div style="text-align: center;"></div>

<p>&nbsp;</p>
</div>

<div>&nbsp;</div>

<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>2,单步调试,观察EEPROMEmulationBuffer 会发现开始数据都是0,后面第一第二个数据有变化。</div>

<div> &nbsp;</div>

<div> &nbsp;</div>

<div>记得这里都是单步调试哦。</div>

<div>&nbsp;</div>

<div>3,复位 在单步调试到EEPROM_TypeA_init之后,看数据是否变化。</div>

<div>&nbsp;复位后&nbsp; &nbsp;</div>

<div>调试到EEPROM_TypeA_init之后:</div>

<div> &nbsp;</div>

<div>发现上次复位前的数据恢复了。证明数据存储到flash了,而且数据正确。</div>

<div>到此,这个实验验证正确了,剩下的就是以后咋们怎么应用他到产品中了。</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>4d592f9b95c5140f987ae238ba63f2dc<br />
&nbsp;</div>

<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 谢谢</div>

<div>&nbsp;</div>

<div>&nbsp;</div>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

单子yang 发表于 2023-11-29 01:46

<p>感谢楼主的分享,很不错的分享!学习中</p><br/>

asdfasasdfasddf 发表于 2024-7-25 18:08

你好楼主,这个帖子的代码方便发一份吗

damiaa 发表于 2024-7-26 08:18

asdfasasdfasddf 发表于 2024-7-25 18:08
你好楼主,这个帖子的代码方便发一份吗

<p>打开ccs 生成eeprom_emulation_type_a_test_LP_MSPM0L1306_nortos_ticlang项目</p>

<p>这个可以用ccs生成的。你仔细看下帖子。</p>

Gyroxp 发表于 2024-8-18 18:44

<p>很多单片机都有内部eeprom,可惜mspm0没有</p>
页: [1]
查看完整版本: 【MSPM0L1306 LaunchPad】 10 eeprom仿真A模型