开发U盘,很重要的工作就是管理nand flash,这关系到U盘的可靠性、寿命、成本等。这些和USB就没有太多关系了,这里不讲。
U盘遵循MSC mass storage class和BOT bulk only transport协议。这两个协议比较简单,BOT当中的13个case需要仔细斟酌,必须全部支持,建议使用状态机方式来实现;注意Serial Number,同一种U盘的Serial Number必须不同,否则插上去多个U盘,PC只能识别出一个。
麻烦的是U盘需要支持的SCSI命令集,www.t10.org上SCSI命令集一大堆,到底要支持哪些。没有完整的文档说明U盘必须要支持哪些命令。要获取这些命令,最简单的方法就是找一个U盘,用bushound把数据都抓下来进行分析。(所以,别看现在U盘满大街都是,但做出第一个U盘的人是挺厉害的)
开发U盘需要参考到SPC、SBC、SMC等规范,当然不是全部要看,需要哪部分就看哪部分。
一个基本可用的U盘,需要支持的命令有:
Unit Test Ready
Inquiry Data
REQUEST SENSE
Read Capacity
Read Format Capacity
Read10
Write10
VERIFY10
解析完这些命令一个基本上可用的U盘就可以实现了。
如果要继续深入,兼容性做得更好,windows2000->win8、linux、mac都能支持,在解析命令时需要一些小的技巧;另外,还需要额外支持一些命令。