最近也有这个想法……读卡器坏了,想拿Raspberry Pi Pico做一个读卡器使使,结果看了一眼USB协议,直接被劝退了它自带的那个MicroUSB好像没法用,只能传固件或者烧录程序。
……好麻烦
好早就想自己整个U盘这个向同学显摆。但有几个关键问题让想法仅还是想法。
用51做优盘,若用io模拟时序了话USB协议首先把我劝退,大篇幅的文档着实抽象。另外据所知网上用51做优盘的确实不多,一搜单片机优盘,出的大多是stm32方案,51资料少。
直到在宏晶官网瞟见8h8k64u的宣传资料,这货带usb!而且它的开发板例程里就有个是msc(大容量储存设备)应用。
那就简单了啊!
材料.硬件:stc8h8k64u单片机(本人用的是40脚直插)、25Q80闪存芯片(尽量买新的吧,拆的可能写保护)、sop8-dip8转接板、usb头(♂)、1117稳压ic、led*2。
材料.软件:stc8h8k64u试验箱v9.6资料、stc_isp和下载器、keil
找到试验箱资料里的msc示例项目,按照实验箱电路图里的接法把flashh挂在硬件spi2脚位上,其中wp脚直接接3v3即可,上上拉电阻可省略。
再接两颗led到任意io口,显示状态用。如果要usb下载了话,再焊一个按钮就好了。
搭好外围电路,预先跑一个flash测试程序,无误。编译烧录、插入电脑,只听插入时电脑发出愉快的叫声,不一会资源管理器也显示出了可移动磁盘字样,,,
诶,但是怎么格式化不了呢???
插入电脑后声音正确说明usb部分工作了,但没法读写很明显是flash驱动这块有毛病。例程里flash物理层对应的是memeory.c和memory.h两个文件。
其中BOOL flash_check()是用来检测flash类型的。根据代码不难看出它通过读取3字节的id,只识别华邦(W)、兆易(GD)的spiflash,并且容量也只支持128,256,512,1024kbyte。如果你的flash型号和容量不符合要求,那ckeck_flash就会不通过,usb握手后程序也不会再往下进行;只要把if里面的判断条件改为恒成立,就可以让它强制支持你的flash了。
而static BYTE shift(BYTE dat)是读写函数,里面用的是硬件spi2口读写flash。因为某些的原因(我也很发迷,还得等大佬来解答)硬件spi读取flash总是失败,读到的一直是0xff,check_flash也自然不会通过。没办法,就手写了个io模拟spi替换掉原来的shift函数,然后就顺利通过check_flash,顺利往下进行了。(可以在语句中加入led闪烁来判断是否运行到这一步,也可以让两个led以iic的时序慢速闪烁来显示变量二进制信息)
把flash调通了,U盘也就能用了。插上电脑等一小会就会提示你格式化。格式化完就可以正常使用了!当然,因为是8位
主控加软件spi,速度快不到哪去,还会弄得电脑很卡。经测试写入速度可达50kb/s(频率拉到40Mhz时),读取速度只会比这更快。
还有好多好玩的呢-------
如果想让电脑识别出不同的东西,可以去scsi.c里改;
如果想改变容量,分区大小,可以去memory.c里改;
如果想更换存储介质,比如把flash换成sd卡搞一个简易读卡器,就可以接驳自己的物理层读写函数。
如果想实现只读,就把写操作嘎掉就好了(电脑会报错或者直接就卡到那不让你删除)。
如果.........总之大家尽情探索吧,把这个代码摸透彻对学习软硬件都很有帮助呢
总之官方例程的移植还算是顺利,要是上网多买个stc8h8k64u的16脚贴片款,再多来点spiflash,就能批量制作了(滑稽)
last but not the least,这个优盘的寿命估计不会很长。根据代码很容易看出,致命的一点是它并没有支持坏块和磨损平衡(所以才叫它简易优盘,,)。也就是说较靠前的那些扇区会被反复擦写,最先爆金币,然后因为没有坏块管理整个盘就会因此而报废。当然,just for fun了话数十万次的擦写寿命也就够用了。
最近也有这个想法……读卡器坏了,想拿Raspberry Pi Pico做一个读卡器使使,结果看了一眼USB协议,直接被劝退了它自带的那个MicroUSB好像没法用,只能传固件或者烧录程序。
……好麻烦
现在的带usb phy还好了, 我读书的时候, 是用的外挂usb phy的, 如果有老的IDE硬盘, 还可以用GPIO模拟IDE时序驱动硬盘, 就成移动硬盘了
优盘的读写速度和flash性能直接挂钩。如果用的flash非常垃圾了话-----
就会出现罕见的字节级读写速度(这我之前还真没见过呢。)
Flash 采用的是24位地址,理论上来说W25Q256之前的容量都是可以用的。此外还偶然发现,flash容量越大,U盘读写速度越拉胯。4M的明显慢于2M的,而他们都比不上1M的
还是赶紧换stm32,资源多用SD卡挂载为u盘很好搞。
stc的小单片机还是很好用得,之前需要做一个断电保存参数的功能,用stc8x加两个电容,引出TxRx解决,够用就行
XXXXXXXXXXXXXXXXXXXXXXXX/t/72361 stm32版本 15年金坷居士做的
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。