NXP

使用ARM-LPC3131上的nandflash实现U盘模式心得(一)

2019-07-12 13:30发布

使用ARM-LPC3131上的nandflash实现U盘模式心得(一)          项目是基于NXPLPC3131的,之前实现了NANAFLASH启动的BOOTLOADER,使用的KEIL,话说NANDFLASH的自启动让我头疼了许久,不过最总还是实现了,感觉这个CODing的过程真是令人烦躁。言归正传,现在想继续实现通过USB传输来读写NANDFLASH,也就实现U盘模式。 实现U盘模式,必须了解USB设备协议、Mass Storage ClassUFI协议、FAT文件系统等相关知识。有了这三部分的实现后PC端就会认出一个U盘,和普通的盘无异。大致分3步: 1USB设备的枚举。涉及到基本的枚举命令,可以发现新硬件和类型,是Bulk-Only传输方式的Mass Storage设备,此过程是基于控制断点EP02UFI命令的答复。有三种数据包格式,分别是CBWOUT)、CSWIN)、普通数据Data。其中,设备需从CBW包中解析出相关的UFI命令,并做相应处理,可能涉及相关Data,然后发回CSW包作为一个命令应答的结束。此过程是基于传输端点Bulk-OutBulk-In在我的程序里出现了以下命令: INQUIRY0x12)、 READ_FORMAT_CAPACITY0x23)、 READ_CAPACITY0x25)、 READ_100x28)、 MODE_SENSE0x1a)、 TEST_UNIT_READY0x00)、 REQUEST_SENSE0x03)、 WRITE_100x2a)、 VERIFY0x2f3FAT文件系统结构。我的程序用的是FAT16(因为盘的容量小)。做出的U盘的逻辑空间必须按照FAT文件系统的要求依次存放MBRDBR)区、FAT区(两张FAT表)、Directory区、Data区,具体空间分配如下:  sector  Block/Page  Length  Content  0  0,0  512Bytes  DBR=BPB + Excutable Code + 55AAH  1-32  1,0-1,31 16k  FAT table  33-64  2,0-2,31 16k  FAT table(backup)  65-96  3,0-3,31  16k  Directory 97-MAX  4,0-MAX    DATA  今天先记录这些,后面有时间再写哦。。。