cc3200flash问题
TI工程师:
我想请教一些flash问题。
1、cc3200内部没有flash,是外扩的1M flash,我想存储参数到flash,我应该如何确定flash地址呢?
2、这些flash api函数是操作外部扩展Flash吗?地址是0-1M吗?
请问使用Fs api函数,实际操作的是外部扩展flash?
对的,请参考http://processors.wiki.ti.com/index.php/CC32xx_File_Operations
SDK里面有对应的操作文件系统的example C:\ti\CC3200SDK_0.5.2\cc3200-sdk\example\file_operations
fs api函数在例程里可以执行,为什么我移植到其他例程里就不能执行了呢,需要做什么操作。我存参数的话,用文件系统太慢,我还是想直接操作flash,请问如何执行
你说的不能执行是什么意思,是有什么错误吗?
是不是因为我前面没有加sl_start?
是的,你需要先sl_start再去操作。
你好:
如果我多个线程都使用了simplelink函数,是每一个线程都需要加”sl_start“吗?
不用,只需要一个,但是你需要做好同步和互斥。
在user.h里面有操作系统相关的函数定义,你可以参考一下。
请问一下,个例子只是操作文件系统的,相当于打开一个文件
有没有可以直接读写内存的方法呢?
想你说的是直接读取flash吗?目前是没有的,我们建议还是用文件系统的方式来操作,这样比较方便的。
你好,
你说的用文件系统方式操作file_operations,操作得是CC3200外部的存储么? 还是CC3200内部的呢
cc3200内部没有Flash,是操作的外部1Mflash
是的,是外部的FLASH,这个FLASH里面有一块区域是给用户文件存储的。可以创建,打开,读,写,关闭等操作。
您好,fs api函数是把文件存在外部的flash里面,为什么我写的测试程序存了一个全局变量到文件里面,但是断电重启后显示的变量没有保存呢?
Hi Weiluo,
你好!
按理来说应该不会。 是不是哪里操作有问题,贴个project,大家来看看吧。谢谢!
你好,请问这里调用sl_Star为什么还需要同步和互斥。
我创建了两个任务,一个是HttpServerTask,SDK的example里的,另一个是自己移植的file operation task,这两个任务都需要调用sl_Start。
我发现这两个task里,任务优先级高的在调用sl_start时会卡死,然后任务优先级低的能够成功调用sl_start;
通过在线调试的方式调试的时候,没有这个现象,两个task里都能调用成功;但是用uniflask将程序烧到flash里之后,就会出这种现象。
不太想得通为什么,麻烦指导一下,谢谢!
建议不要在两个task里面这样做,你可以通过信号或者其它的什么方式来通信,在一个task里面维护simplelink的状态。
您好。请问您说的在一个task里面维护simplelink的状态指的是什么?是指跟simplelink相关的函数调用都在一个task里面么?
如果我有多个task都需要调用simplelink的函数,是否可以在一个优先级比较高的task里先调用sl_start函数,然后在其余的task里直接调用simplelink的函数实现需要的功能呢?按照我目前测试的情况来看,似乎是可以的,但是这个跟您说的在一个task里维护simplelink似乎又是冲突的。
是的,这样是OK的,simplelink内部也是有互斥机制的。不过你的sl_Start不要在不同的task里面调用。
TI工程师:
你好!如果我要直接读取烧写进去的固件该怎么办?
如果直接读取Flash扇区可以通过偏移地址进行读写操作,那么用文件系统是否有特定的文件用于存放固件呢?
谢谢!
文件名是/sys/mcuimg.bin
你不能直接读FLASH扇区,必须要通过文件系统。
TI工程师:
您好,首先谢谢您的解答!
那如果我需要新建一个FirmWare.bin文件作为固件备份区用于刷入新的固件,这个固件的大小可能1MB甚至更大,试了一下,貌似创建不了超过64KB的文件。这样该如何解决?
谢谢!
还有就是,我们操作读写的时候,不会直接引用fs.h的sl_FsOpen、sl_FsRead、sl_FsWrite等这些函数,会把它们封装成我们想要的函数形式。这样问题就来了,比如说我板子上电初始化时候需要读取一些flash中的数据,如果调用自己封装好的函数根本起不来会死在一个地方,如果直接调用该函数里的内容就可以起来。这有点不合理。
如下:
void F2(void)
{
…………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_CREATE(1024, _FS_FILE_OPEN_FLAG_COMMIT | _FS_FILE_PUBLIC_WRITE), ulToken, &lFileHandle);
…………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_WRITE, ulToken, &lFileHandle);
lRetVal = sl_FsWrite(lFileHandle, Offset, (unsigned char *) pWriteBuffer, WriteBufferLen);
………………………………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_READ, ulToken, &lFileHandle);
lRetVal = sl_FsWrite(lFileHandle, Offset, (unsigned char *) pReadBuffer, ReadBufferLen);
}
1、//起不来
void FlashTask1(void * p)
{
F2();
}
2、//起得来
void FlashTask1(void * p)
{
…………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_CREATE(1024, _FS_FILE_OPEN_FLAG_COMMIT | _FS_FILE_PUBLIC_WRITE), ulToken, &lFileHandle);
…………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_WRITE, ulToken, &lFileHandle);
lRetVal = sl_FsWrite(lFileHandle, Offset, (unsigned char *) pWriteBuffer, WriteBufferLen);
………………………………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_READ, ulToken, &lFileHandle);
lRetVal = sl_FsWrite(lFileHandle, Offset, (unsigned char *) pReadBuffer, ReadBufferLen);
}