新唐M480系列带USB 2.0高速接口,可以工作在Host模式。项目需要把采集数据直接写入U盘,用M480的USB Host配合FatFS实现,过程记录如下。
一、Host模式硬件要求
1. VBUS供电由外部MOS控制,ID/DEVCONNECT检测引脚配置为输入;
2. DP/DM差分走线等长,阻抗90Ω,加上下拉电阻与ESD器件;
3. 若使用高速模式,需外接高速PHY;一般U盘读写用全速即可满足。
二、协议栈框架
新唐提供的USB Host Library分三层:底层寄存器操作、USBD核心(枚举、管道管理)、上层的MSC(大容量存储类)驱动。移植时只需关注USBH_IRQHandler的中断接管与usbh_core_task在main循环中的周期调用(建议1ms)。
三、枚举流程要点
1. 检测到设备连接后复位总线,读设备描述符,设置地址;
2. 读配置描述符,选择一个配置,再读接口与端点描述符;
3. 对MSC设备执行SCSI的TEST UNIT READY/READ CAPACITY获取扇区数,然后挂载FatFS;
4. 部分U盘的SET_INTERFACE命令响应慢,要给足100ms以上的超时,否则枚举失败。
四、读写实现
FatFS的diskio层对接USB MSC:disk_read/disk_write内部调用USBH_MSC_Read10/Write10,扇区大小512字节。注意:
1. 单次传输长度不超过端点MPS的整数倍,否则需要拆分;
2. 写操作必须等到CSW返回成功再释放缓冲,否则掉盘;
3. 拔出检测要做防抖,立即停止后续写操作并卸载卷,避免文件系统损坏。
五、性能与可靠性
实测Class 10的U盘写入速度约1.1MB/s,读取约2.4MB/s(全速USB上限12Mbps)。对每秒几KB的数据采集完全够用。长测试中遇到的问题:
1. U盘热插拔后文件句柄失效,必须重新f_mount;
2. 断电时正在写导致FAT损坏,解决办法是小数据先在RAM缓冲,凑满4KB再写,并配合定期f_sync;
3. 部分U盘需要较长的上电稳定时间,插入后延时200ms再开始枚举更稳。
六、结论
M480做USB Host U盘存储方案成熟可用,关键是枚举容错与写入的掉电保护。建议在产品里加入"文件系统损坏自动重建"的兜底逻辑,避免用户数据丢失引起投诉。
|
|