tzz1983 发表于 2024-1-23 16:23:27

【RTOS/uCOS-II + U盘/USB_MSC + 文件系统/znFAT】@STC32G

本帖最后由 tzz1983 于 2024-4-3 19:28 编辑

【RTOS/uCOS-II + U盘/USB_MSC + 文件系统/znFAT】@STC32G
介绍:
1.MSC-U盘例程是在中断里执行代码,CPU占有率太高,本贴使用RTOS分配CPU资源,
将USB代码转移到任务里去,USB_MSC持续读写文件时CPU占用率为9%,
USB_MSC无读写操作时CPU占用率为1%。
2.为了读出文件内容,加入了znFAT,尽在上电启动时使用znFAT读出文件内容。
   以避免znFAT和USB_MSC发生访问冲突。
3.存储介质为 W25Q128,全程 DMA-SPI 读写,几乎不占用CPU。
4.项目中多处循环等待标志的节点改为阻塞延时等待,释放CPU,RTOS的特色。

特点:
1.已加入的应用有USB_MSC + znFAT,CPU占用率仍保持低水平,可加入许多其它应用。
2.USB_MSC 与znFAT共存,作为MCU与PC之间的通信通道。
3.SPI使用DMA方式访问FLASH,DMA完成后在中断里发送一个信号量激活任务,
   数据传送不占用CPU资源,和RTOS配合很完美。

本文可验证本人移植的UCOSII.
文中有许多RTOS的一些典型使用方法,将中断代码分配到任务,
利用阻塞查询标志,信号量同步等,可作为参考。


电脑上编辑文本,串口printf显示文件内容

代码执行printf截图:


代码:

tzz1983 发表于 2024-1-27 14:50:41

上次传上来的代码有BUG,在软定时器调用的时候无意触发了阻塞,
忘记了UCOS软定时器内不允有等待类的代码,今天重新传上代码.
SPI用上DMA了,现在连续读写文件,CPU占用率9%

jwg 发表于 2024-1-29 13:28:53

谢谢分享

神农鼎 发表于 2024-2-9 09:41:40

龙年新春捷报:
STC8H2K32U-45MHz-LQFP32/TSSOP28 的 USB 型 MCU 已开始制造光罩流程中
RMB1.3 的 USB, STC8H2K32U-45MHz-LQFP32/TSSOP28/20,SOP16, 4月开始供货
51世界火热的夏天全面来临 全面 进入 USB 时代 !新增硬件32位乘除法器MDU32C
硬件USB 支持 仿真/下载, RTC 实时时钟, 年/月/日/时/分/秒,星期
真12位ADC, 144MHz-16位高级PWM新增硬件移相功能
32K Flash, 2.5k SRAM, USB, 双串口/I2C/SPI, 轨到轨比较器,12位ADC, PWM
串口1/串口2:
===都支持串口接收硬件超时侦测,硬件奇偶校验
===都支持帧错误数据检测和自动地址识别
T11,强大的24位低功耗定时器/系统定时器,支持低功耗唤醒
P1.2口在P5.4口上共享,P1.0/P1.1的全部数字功能可以交换

STC8H2K32U要让51成为永恒的经典:钻石恒久远,51永流传

======================================================================

RMB0.99 的 USB, STC8H2K08U-45MHz-TSSOP20/SOP16,已开始供货
51世界火热的夏天全面来临 全面 进入 USB 时代 !

_NCY_ 发表于 2024-2-22 22:59:31

问一下,就是FLASH的最小擦除单元是4KB了话,
znfat里的512B扇区清空怎么适配?
真要4KB全部擦掉再写回去3KB吗?

tzz1983 发表于 2024-2-23 07:56:44

本帖最后由 tzz1983 于 2024-2-23 08:11 编辑

_NCY_ 发表于 2024-2-22 22:59
问一下,就是FLASH的最小擦除单元是4KB了话,znfat里的512B扇区清空怎么适配?
真要4KB全部擦掉再写回去3KB ...
FLASH是4KB基本单位读写,在底层做了一个4KB的缓冲区,只有当访问扇区地址需要跨越扇区时才真正有扇区读写操作,否则就是访问缓冲区替代扇区读写。
这样做对外屏蔽了底层属性,也就是对外接口不限制写多少字节,也不需要对齐扇区操作,底层自动处理。
/*---------------------------------------------------------
//写数据,自动分扇区,不限制写入数据量
----------------------------------------------------------*/
void W25QXX_Write(u32 addr, u8 *buf, u32 Size);

这样做有两个好处:
1.提升小片数据的写入速度,比如连续写8次512字节,实际上只有一次扇区操作, 大幅提升了写入速度
2.减少RAM使用量,不管是MSC还是znFAT, 现在都只需要512字节缓冲了. 可以想象一下,如果MSC和znFAT都以4096为读写单位,那8Kxdata瞬间就被用完了

_NCY_ 发表于 2024-2-23 17:18:22

哦对,还有就是fat32能在flash这么小的空间里建立吗?我看电脑上格式化stc 4M优盘,只有个fat和exfat选项啊,他们两个和fat32兼容吗?

_NCY_ 发表于 2024-2-23 17:31:52

2Mflash 优盘格式化好了,选的fat选项,没有钩选快速格式化。
我想用按照znfat书里的那样解析磁盘,物理模式但打开之后为什么MBR的DPT表显示东西不对?
都是按照书上来的,在其他U盘SD卡上解析没问题,但就在2M模拟优盘上显示这个,这是为什么啊

tzz1983 发表于 2024-2-23 18:53:26

_NCY_ 发表于 2024-2-23 17:31
2Mflash 优盘格式化好了,选的fat选项,没有钩选快速格式化。
我想用按照znfat书里的那样解析磁盘,物理模 ...

znFAT只支持一部分FAT格式, 并没有全支持


实际使用时, 需要用znFAT格式化, 如果用PC格式化, znFAT可能无法识别
还有就是znFAT无法格式化小于8M的盘

神农鼎 发表于 2024-3-9 22:32:48

有兄弟说,能再给些您验证过的
【小 GUI,TFT, OLED12864, LCD12864】
加到 您这个综合的系统中大家直接套用就好了
页: [1] 2
查看完整版本: 【RTOS/uCOS-II + U盘/USB_MSC + 文件系统/znFAT】@STC32G