主题中讨论的其他部件:MSP430F5529
您好,
我正在使用闪存的一些内存作为文件系统,并在文件系统中存储一些数据,以便在运行时使用它。 以下是擦除或损坏已刷新固件的情况,我需要再次刷新固件。
- 当我从 文件系统中删除文件时(有时会发生)。
- 当我复制文件系统中的更多数据时,就会分配其大小(总是发生)。
请提供解决方案以防止上述情况出现此情况。
此致,
Rohit
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.
您好,
我正在使用闪存的一些内存作为文件系统,并在文件系统中存储一些数据,以便在运行时使用它。 以下是擦除或损坏已刷新固件的情况,我需要再次刷新固件。
请提供解决方案以防止上述情况出现此情况。
此致,
Rohit
您好Rohit:
我们假定您所指的是MSC (大容量存储)设备的"M1_FileSystemEmulation (M1_FileSystemEmulation)"代码示例。
根据《USB开发者软件包程序员指南》中的第8.6 节,"应用程序应注意不要允许自身和USB主机同时访问介质。 主机通常会将卷的缓存版本保留在自己的内存中,该版本会与USB设备上的存储器不同步。 因此,当设备通过USB连接到主机时,最好避免从MCU应用程序访问卷。" 也许这就是您观察损坏数据的原因。
对于大小限制问题,介质可以是MCU的内部存储器(非常有限的存储)或外部设备(允许更大的存储),可通过面向外部的接口(例如 SPI,I2C,并行存储器等)。 FAT存储器的常用开源软件解决方案是FatF。 许多MSC应用示例包括FatF的MSP430端口。 M1示例使用“文件系统仿真”解决了对文件系统软件的需求。 此方法通过限制主机可以放置文件的位置来解决应用程序查找文件的问题。 但是,它对主机的可存储文件数量和位置施加了限制。 有关详细信息,请参阅《USB开发者包编程器指南》中的第8章。
此致,
詹姆斯
MSP客户应用程序
是的,Jame,我正在使用相同的示例代码。 感谢您的意见。
如何防止同时访问文件系统和介质?
例如,在我的应用程序中,在开机后,MSP首先从文件(从其文件系统)读取配置并配置从属设备。 因此,我需要做的是,我需要阻止文件系统检测/与主机通信,直到完成从属设备的配置。 我对吗?
是否有任何API正在通信主机设备? 因此,我只能在完成所有配置后进行类似的代码编写,这是一个很好的过程。
文件系统的检测是否会受到主机系统的USB驱动程序的影响?
请告诉我您的建议。
谢谢你。
我正在尝试了解这些从属设备是什么以及它们是如何连接的。 从您所描述的内容来看,MSP430F5529听起来像是通过USB端口插入主机设备,但我很困惑从属设备的连接方式。 您能否提供有关各种设备和接口的基本结构图?
[报价用户="Rohit Kotak"]
如何防止同时访问文件系统和介质?
例如,在我的应用程序中,在开机后,MSP首先从文件(从其文件系统)读取配置并配置从属设备。 因此,我需要做的是,我需要阻止文件系统检测/与主机通信,直到完成从属设备的配置。 我对吗?
[/引述]
这听起来是正确的。 您必须确保您的应用程序代码不允许同时访问。
[报价用户="Rohit Kotak"]
是否有任何API正在通信主机设备? 因此,我只能在完成所有配置后进行类似的代码编写,这是一个很好的过程。
文件系统的检测是否会受到主机系统的USB驱动程序的影响?
请告诉我您的建议。
[/引述]
在M1_FileSystemEmulation代码示例的'main.c'文件中,我怀疑您要在以下两行代码之间添加从属配置代码:初始化文件系统仿真卷之后和USB初始化之前。
USBMSC_INITFSE();//初始化文件系统仿真卷 USB_setup(true, true);//初始化USB和事件;如果存在主机,请连接
此致,
詹姆斯
MSP客户应用程序
您可以尝试一些操作,这样在配置文件系统并同步到主机后,您就不会通过应用程序访问文件系统。 也许您可以在调用'USBMSSC-initFSE()'函数调用之前配置从属设备。 内核和时钟将保持运行,但文件系统尚未初始化。
如果这不起作用,您可以尝试断开USB连接并在USB处于活动状态时禁用它。 因此 ,在代码中,当您要配置从属设备时(假定您在枚举发生后执行此操作),您可以按列出的顺序调用以下函数以断开USB连接:
USB_disconnect()
USB_disable()
然后,当您准备好重新连接到主机时,您可以调用以下功能:
USB_reset()
USB_CONNECT()
此致,
Arthi
感谢Arthi的快速回复。 以上解决方案对我很有用,我可以使用60kb的文件系统。
我在M1.cmd中使用了FLASH3作为MYDRIVE,并按照 链接程序文件中的建议使用了FLASH2和FLASH3。(我更新了内存下的FLASH2和FLASH3的链接程序文件。 FLASH3各节的预期内容是什么?)
但我观察到我总是能够使用60kb。 我将FLASH3更改为48kb (FLASH2:0x1万更改为0x1.84万,FLASH3:0x1.84万更改为0x2.44万,阵列大小更改为0x6000),但我仍然可以使用60kb的闪存作为文件系统。 我能够存储高达60kb的数据。 数据存储在何处? 如何仅将FLASH3的内存导出为文件系统?
在"M1_FileSystemEmulation (M1_FileSystemEmulation)"示例中没有更改,完整FLASH2用作81KB的文件系统,但此处也只有60kb作为文件系统导出。
我仍然认为我错过了一些东西。
再次感谢以上解决方案!!
此致,
Rohit