微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > cc3200flash问题

cc3200flash问题

时间:10-02 整理:3721RD 点击:

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);

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top