原创 DSP开发飞利浦ISP1161

2009-4-10 09:27 2644 4 4 分类: MCU/ 嵌入式

1. 由于使用的是DSP芯片,总线速度400M,USB芯片速度跟不上,所以要读写需要延时。


2.一般bulk端点最大包长度为64字节,所以用usbview在电脑看到的512个字节是错的



3.建立一个文件的流程:


      首先从文件开始的扇区开始查询,如果某个扇区中读出的字节内容为0x00,或者为0xe5则目录为空,将所要建立的目录写入到当前所读的扇区中。并将文件长度和偏移一簇的偏移量记为0。


4.打开一个文件的流程:  


     在打开文件时,需要查找文件名,查找文件名时,首先从目录开始的簇号开始查询


     FAT16格式下的目录开始簇号为数据区的起始扇区 FirstDataSector=根目录开始的扇区+根目录所占的扇区。


     FAT32格式,目录开始的簇号为BPB的第45,45,46,47字节的组合,一般建议为2.


    找到了文件名后,将文件开始的簇号,目录所在的扇区,目录偏移该扇区的字节数记录下来,如果该文件时空文件,将该文件开始的簇号转化为该簇号所对应的扇区。如果不是空文件,则需要查找该文件的尾簇,文件的尾簇为0x0fffffff。


  


      


5.写文件的流程:


     如果文件开始的簇号为0,说明该文件是个空文件,首先在FAT表中寻找一个空簇号给该文件的起始簇号,并将该簇号标记为文件的尾簇


   如果文件不为空,从该文件的尾簇所对应的起始扇区开始读取一簇的内容保存起来,如果该要写入的文件长度加上文件起始长度大于一个簇的话,先算出该簇剩余的字节数,将要写入的数据的部分长度先写入到该簇的保存的变量中,并将该文件簇的偏移量置为设为0,然后寻找下一空簇号。方法:将该文件的尾簇所对应的起始扇区,开始查找,首先将该簇号转化成相对应在FAT表中的扇区位置,读取该扇区的内容,然后查找(查找范围为当前扇区到FAT结束的扇区,如果没有空簇,则回查),查找的目的就是就是将当前簇号链接到下一空簇的内容,再将下一空簇内容记为0x0fffffff(对于FAT32格式)或者记为0xffff(FAT16格式);


 6.USB设备接口描述符对应的的bInterfaceClass=8,说明该设备为海量存储类设备


7. 当没有设备连接到USB端口时,和D+D-线相连的下拉电阻(15K)保证数据线接地,USB设备必须至少在D+D-线的任意一条上有一个上拉电阻(1.5K,电压3.0-3.6V)。全速设备D+上拉,低速设备D-上拉。保持时间2.5us


8.如何在FAT表中寻找一个空簇,首先确定查找范围(FAT表的起始扇区到FAT表的结束扇区),分别读取每个扇区的内容,如果读取的内容值为0,说明该簇为空簇,记录下该簇的簇号,如果是FAT表中的第i个扇区的第j个字节,簇号为i*256+j(FAT16格式),簇号为i*128+j(FAT32格式)


9.如何将簇号转换成扇区呢? 数据区的簇号从2开始的,簇号N所对应的扇区为


  (N-2)*每簇所占的扇区数+数据区的起始扇区


10.如果写入的文件长度+文件原有的长度大于一个簇的话,就需要链接到新的空


簇号,将该空簇号标记为已用簇,


11,簇的大小决定了该盘数据区的利用率。FAT16系统簇号用16位二进制数表示,从0002H到FFEFH个可用簇号(FFF0H到FFFFH另有定义,用来表示坏簇,文件结束簇等),允许每一逻辑盘的数据区最多不超过FFEDH(65518)个簇。FAT32系统簇号改用32位二进制数表示,大致从0000002H到FFFFFEFFH个可用簇号.


12 开发从机时碰到的一些问题:


1.设置地址时,要先设定地址,再发一个空包给主机


2.设备枚举过程:


   1.主机发送80 06 00 01 00 00 40 00


     从机回送端点0大小个字节


  2.主机发送00 05 02 00 00 00 00 00


     从机回送一个空包给主机


  3.主机发送80 06 00 01 00 00 12 00


     从机回送18个设备描述符


  4.


  


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条