666可以
{:4_166:}
按您的工程,我把SPI修改成QSPI,无法格式化,请问大概是哪里的问题?
cyf1029 发表于 2025-7-24 20:53
按您的工程,我把SPI修改成QSPI,无法格式化,请问大概是哪里的问题?
1.问题大概率出现在本地读写FLASH相关的基础代码。无法正常读写磁盘时就无法正常格式化。
先在本地调试好正常读写FLASH的基础代码,可快速查找出此类问题。
2.与USB_MSC,FATFS适配的问题,本例中因为同时使用两者,两者定义的扇区大小须相同才可正常使用(例中是设定为512Byte一个扇区)。
由此延伸出另一个问题需引起注意: FLASH自身是4096/扇区,中间需要一些处理才能更好的适应 USB_MSC/FATFS 以512为单位的访问。
注重细节,每个很小的失误都可能导致失败,祝您早日找出问题
tzz1983 发表于 2025-7-25 08:19
1.问题大概率出现在本地读写FLASH相关的基础代码。无法正常读写磁盘时就无法正常格式化。
先在本地调试好 ...
忽略掉FATFS,只调试USB_MSC和W25Q128,目前是能格式化U盘了,但是又出了一个新的问题,每次重新上电都要格式化U盘,这个也是跟w25q128读写函数有关吗?
tzz1983 发表于 2025-7-25 08:19
1.问题大概率出现在本地读写FLASH相关的基础代码。无法正常读写磁盘时就无法正常格式化。
先在本地调试好 ...
W25Q128的驱动用的是官方的QSPI驱动,只是把您w25qxx的读写函数修改了一下,由SPI_DMA驱动改为QSPI驱动
cyf1029 发表于 2025-7-26 11:46
W25Q128的驱动用的是官方的QSPI驱动,只是把您w25qxx的读写函数修改了一下,由SPI_DMA驱动改为QSPI驱动 ...
具体细节很难用 “猜” 来获取答案的。 再多花些时间去调试或好好想想吧。
如果说当前可以格式化,上电以后又不能识别上次已格式化的盘了(就是又提示需要格式化)
这种问题大概率原因还是 -> 数据没有正确的写入FLASH. 只是这个问题延迟到了下次启动时,系统检查U盘格式时才会发现。
特别注意:如果 FALSH 驱动有中间缓冲层,一定要记得定时+或下电前把缓冲数据写进FLASH
U功能在数据临时采集太实用了
学AI8051U的定时器中断,就像给芯片装了个“智能闹钟”,不用一直盯着时间,到点了它会主动“提醒”,这比用循环死等高效多了。
刚开始觉得定时器寄存器密密麻麻的,什么TH0、TL0、TCON,光看手册就头大。实际上手才发现,核心就是“设定时间”和“开中断”两步。比如想让LED每1秒闪一次,先算好定时器的初值——8051的主频是12MHz,一个机器周期是1微秒,要定时50毫秒,就给TH0和TL0装对应的值,让它数数到顶就“触发”。这就像给闹钟设好倒计时,时间到了它就响。
中断函数是个“小秘书”。一旦定时器触发,主程序会立刻暂停,跳去执行中断函数里的内容,比如让LED翻转一下,完了再回去继续干正事。刚开始没掌握窍门,中断函数里写了一堆代码,结果主程序卡得要死,后来才明白,中断里要“速战速决”,就像秘书汇报完工作就退下,别耽误老板干活。
最惊喜的是定时器的“嵌套”用法。比如用定时器0控制LED闪烁,同时用定时器1做个秒表计数,两个中断各干各的,互不耽误。这比用一个循环同时管两件事清爽多了,就像家里两个闹钟,一个叫起床,一个提醒做饭,各司其职。
当然也踩过坑:忘了开总中断EA=1,结果定时器跑断腿也没反应;初值算错了,本来想1秒闪一次,结果变成了狂闪。后来发现,算初值时用计算器先算好,再在程序里用宏定义写清楚,就不容易错。
现在用定时器中断做小项目,比如模拟交通灯、倒计时器,感觉芯片像有了“时间观念”。从一开始对着初值公式发呆,到现在能灵活控制多个定时任务,才明白这东西的妙处——它让芯片从“被动执行”变成了“主动规划”,这大概就是学单片机最有成就感的时刻吧。
{:4_250:}