工具/软件:TI-RTOS
您好!
我正在使用"nvsinternal"程序来读取和写入闪存、它工作正常。
但是、我更改了用于写入和读取1000个字节的代码。
我的代码如下所示。
首先、我将发送数据进行写入、然后发送数据进行读取。
因此、在读取时、我能够正确读取五个字节、剩余的所有字节都是零、而不是实际数据。
首先、让我知道编写代码的方式是否正确、还建议我 只正确读取5个字节的原因。
谢谢你
此致
Kalyan。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI-RTOS
您好!
我正在使用"nvsinternal"程序来读取和写入闪存、它工作正常。
但是、我更改了用于写入和读取1000个字节的代码。
我的代码如下所示。
首先、我将发送数据进行写入、然后发送数据进行读取。
因此、在读取时、我能够正确读取五个字节、剩余的所有字节都是零、而不是实际数据。
首先、让我知道编写代码的方式是否正确、还建议我 只正确读取5个字节的原因。
谢谢你
此致
Kalyan。
您好 Chris、
感谢你的答复。
我已将 nvsinternal.c 文件附加到此帖子。
请仔细阅读。
我将发送 A12美元用于写入数据、B34美元用于读取数据。
谢谢你
此致
Kalyan。
您好 Chris、
请回复我之前的问题。
我观察到的另一件事是-如果我一次写入1000个字节而不是250次写入4个字节、我将获得正确的读取操作结果。
就是这样
NVS_WRITE (nvsHandle、0、&Tx_Buffer、1000、NVS_WRITE_POST_VERIFY);
NVS_READ (nvsHandle、0、&RD_Buffer、1000);
工作正常。
另外一件事是、如果我使用两个数组来写入数据- 第一个写入操作的偏移0和 array1为4字节、偏移4和 array2为5字节、那么我使用时结果是正确的
NVS_READ (nvsHandle、0、&RD_Buffer1、4);
NVS_READ (nvsHandle、4、&RD_Buffer1、5);
但在随附的.c 文件中、我无法找到错误所在。 请仔细阅读。
还有一件事是这样
上述初始化意味着闪存被分成8个块、每个大小为16kB?。
谢谢你
此致
Kalyan
您好!
我无法运行代码、需要查看错误。
在板级配置文件中、您应该会看到空间 flashBuf 被留出用于应用。
#define SECTORSIZE (0x4000) #define NVS_REGESS_BASE (0xE0000) #define REGIZE (SECTORSIZE * 8) // *保留用于 NVS 驱动程序的闪存扇区 *方法是在 所需的闪存地址放置一个未初始化的字节数组*。 // #if defined (__TI_Compiler_version__) //* 将未初始化的数组放置在 NVS_REGESS_BASE */ #pragma LOCATION (flashBuf、NVS_REGESS_BASE); #pragma NOINIT (flashBuf); static char flashBuf[REGIZE];
每个扇区为16KB、每组8KB。 由于区域基地址为0xE0000、因此将位于高区域和扇区24-31中。
此致、
Chris
您好!
在写入和读取 API 中、您要将偏移量乘以 NVS 区域、但不会将正在写入或来自缓冲区的索引乘以。
NVS_WRITE (nvsHandle、0+(4*I)、&Tx_Buffer[i]、4、NVS_WRITE_POST_VERIFY); NVS_READ (nvsHandle、 (4*i)、&RD_Buffer[i]、4); NVS_WRITE (nvsHandle、0+(4*i)、 &Tx_Buffer[4*i]、4、NVS_WRITE_POST_VERIFY); NVS_READ (nvsHandle、(4*I)、&RD_Buffer[4*i]、 4);
此致、
Chris