如何实现2640的内部flash读写
如何实现2640的内部flash读写呢?有参考事例吗?
xianglin,
2640的SDK里面用了SNV 供用户去操作Flash的读写。
具体可以参考随SDK来的development guide.
非常感谢Y,周末还能回复我。
你说的那个我知道,现在直接使用SNV读写函数可以实现,但是假如我想读写的数据量比较大(比如10KB)如何实现呢?一个page 4K,是不是直接在函数osal_snv_write( osalSnvId_t id, osalSnvLen_t len, void *pBuf) 的len这个参数上加大到10K左右呢?手册上说代码中默认用户可以的flash存储空间就是0x80-0x8F,这个空间大小可以直接从0x8F向后扩大10K么?还是需要单独在flash中开辟自定义的存储空间?
// Customer NV Items - Range 0x80 - 0x8F - This must match the number of Bonding entries
#define BLE_NVID_CUST_START 0x80 //!< Start of the Customer's NV IDs
#define BLE_NVID_CUST_END 0x8F //!< End of the Customer's NV IDs
xianglin,
这样的话就比较麻烦了。
首先要保证flash里面有足够的空间能给你用(要刨去代码占用的空间和SNV占用的空间)。
然后你可以借鉴一下FlashProgram()这个API的调用。可以参考一下simpleBLEPeripheral工程里面的OAD imageB中的使用方法。
API的说明在这里:file:///C:/TI/tirtos_simplelink_2_13_00_06/products/cc26xxware_2_21_01_15600/doc/driverlib/group__flash__api.html#ga0d891d79df6dbba0288b15a8c30c1331
你安装过SDK的话,就会有这个相应的TI-RTOS的API 说明文档。
有这个API是很方便了,但是内部flash大小总共128KB,使用FlashProgram()的时候如何确定flash内部哪部分地址空间属于unprotected main bank flash sectors呢?正常的从机代码跑RTOS以后可以剩余大概10多KB的flash空间呢,这部分剩余的flash空间地址如何确定呢?谢谢
我以前也问过这个问题,其实最容易想到flash读写函数的,又必须用到的,那肯定是OAD了。悄悄告诉你,OADTarge_Internal_flash中的读写函数好用的不行。
首先谢谢您的回答。OADTarge_Internal_flash这个函数内部封装的也是Flash_progrom()函数,我主要不知道哪部分flash内存空间可以给用户自定义使用的。我现在打算使用10KB的flash内存,那部分可以使用呢?SNV给的是0x80 --- 0x8F,太小了,类似下图。方便指点一下么,再次感谢您!
在吗?使用是如何确定地址空间范围呢?谢谢
你的flash读写解决了没有?是用SNV方式,还是OADTarge_Internal_flash里面的函数呢?我在用OADTarge_Internal_flash的读写函数时候,读是正常的。但是写数据的时候,对固定地址空间只能写一次,写过之后不能改写,只能将该扇区擦除之后才能写新的数据。你是否有遇到此问题呢?
flash难道不是每次写之前都要擦除的吗?