Microchip
直播中

叶亮

7年用户 225经验值
私信 关注
[问答]

简单的NVM驱动程序测试不起作用

我想做一个简单的写和读到NVM上的MX设备在我的以太网初学者工具包II。我使用MHC以中断模式配置NVM驱动程序,然后使用NVM驱动程序帮助文件创建执行擦除/写/读功能的代码。在测试过程中,我发现数据没有被正确地写入和读取。我找不到任何错误,所以我创建了一个简单的测试(见下文),重现了这个问题。这个简单的测试不包括对句柄的任何错误检查,等等,因为在我的测试中从未使用过该路径。并重复写/读循环254次。这似乎是第一次通过循环,写/读是成功的,之后其他254个循环都不成功。我是在做傻事还是这个司机不工作?我正在使用最新的MPLLABx(3.30)和MHC v1.0.7.16.BTW——我尝试了用于驱动程序的MHC中的其他组合,即动态/静态、中断/非中断、向FS注册。没什么用。下面是插入到App.c中的代码片段:

回帖(3)

李蕊

2019-8-14 07:15:03
在Harmony中编码任何应用程序时,最好让和谐模块的Tasks例程(在本例中是NVM驱动程序)定期执行。任务例程在SysStask函数中执行。通过使用IntNVM、ReNNVMDATA和RealEnvMDATA函数中的while循环,您可能不允许执行该任务例程。您的代码正在阻塞。而是检查状态机中操作的状态。您需要检查的另一点是,块开始地址是否与页边界对齐。您可以在项目的SysInI.c文件中在DrvnnvMyInIT数据结构中看到这一点。如果这不起作用,请在您的响应中附上您的项目。
举报

俞丽

2019-8-14 07:25:48
使用DRV_NVM_Write()函数的前提条件是要写入数据的行应该处于擦除状态。第一次调用这个函数时,行处于擦除状态(因为它作为initNVM()的一部分被擦除),这就是为什么它第一次通过循环传递给您。第二次在病房中,调用该函数,行不处于擦除状态。由于写入不实际写入预期数据。请记住,NVM写只能从“1”到“0”转换一点。确保要进行写操作的行处于擦除状态可以解决这个问题。或者,您可以使用DRV_NVM_EraseWrite()函数进行探索,该函数结合了使用新数据编程之前擦除所需行的步骤。还可以参考位于apps.nvmnvm_read_write的示例应用程序。
举报

王雪

2019-8-14 07:32:19
虫子:谢谢,谢谢,谢谢!我知道这很简单。在广泛的文档或示例中,没有看到行在写入预期数据之前必须处于擦除状态的警告。这应该位于使用write函数(IMHO)的每个文档页面的顶部。无论如何,这个简单的测试将节省我稍后在NVM中存储东西时无休止的调试时间。现在,不是把我保存的数据组织成“行”,而是用“页面”来组织。再次感谢。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分