U盘 固件程序格式化问题

时间:2021-07-10 11:23:33
在开发U盘固件程序的时候,不知道U盘在接收到格式化命令后,该有什么样的动作?
格式化的原理和过程是什么?
谢谢

11 个解决方案

#1


5555555

#2


格式化不过是文件系统的一个初始化过程而已。对于U盘固件程序来说,就是一般数据罢了。找到空闲存储区的一个地址,存储好即可。当然要维护好这个映射关系(文件系统LBA到存储区地址的转换关系)。 

#3


对于U盘固件来说,它不知何为格式化。上位机给U盘发送的是一般的读写数据的命令。唯一的区别就是读写的区域不同。
http://blog.csdn.net/kevinyujm/archive/2010/03/27/5423098.aspx

#4


既然格式化只是读写,那么是不是只要读写功能正常就可以格式化了?
现在我的程序读写都可以,格式化的时候window就是会提示“window无法完成格式化”
是不是格式化主机是不是还有进行其他的动作???

#5


我设置断点调试,格式化的时候根本还没有执行到write,就提示错误了

#6


问题猜不出来。
建议你使用bushound配合程序调试,以确定具体原因。

#7


当PC执行格式化之后,PC都发送了那些命令??U盘该如何回复这些命令呢?

#8


引用 7 楼 asanpyx 的回复:
当PC执行格式化之后,PC都发送了那些命令??U盘该如何回复这些命令呢?


你既然读写都正常了,为什么还不了解PC文件系统对磁盘操作?
首先你在主机上通过文件系统操作U盘(格式化,格式化后读写磁盘),都是文件系统完成。格式化是文件系统的初始化,当然这些数据也要写到磁盘上的固定位置(对于U盘来说,就是逻辑扇区固定,具体物理地址就是你固件程序所要完成的工作了)。U盘一般都是使用SCSI协议完成数据包解析的吧(Usb协议只是传输协议,具体使用什么协议解析数据,那是根据具体USB设备而定了-- 看了几个月USB的理解,应该如此)。你可以到网上找些USB Mass Storage实现的SCSI协议文档。

#9


引用 6 楼 kevinyujm 的回复:
问题猜不出来。
建议你使用bushound配合程序调试,以确定具体原因。

#10


这个是U盘自己的事情了。

#11



格式化就是重写文件系统的基本扇区。你执行它发来的读写命令就可以了。

#1


5555555

#2


格式化不过是文件系统的一个初始化过程而已。对于U盘固件程序来说,就是一般数据罢了。找到空闲存储区的一个地址,存储好即可。当然要维护好这个映射关系(文件系统LBA到存储区地址的转换关系)。 

#3


对于U盘固件来说,它不知何为格式化。上位机给U盘发送的是一般的读写数据的命令。唯一的区别就是读写的区域不同。
http://blog.csdn.net/kevinyujm/archive/2010/03/27/5423098.aspx

#4


既然格式化只是读写,那么是不是只要读写功能正常就可以格式化了?
现在我的程序读写都可以,格式化的时候window就是会提示“window无法完成格式化”
是不是格式化主机是不是还有进行其他的动作???

#5


我设置断点调试,格式化的时候根本还没有执行到write,就提示错误了

#6


问题猜不出来。
建议你使用bushound配合程序调试,以确定具体原因。

#7


当PC执行格式化之后,PC都发送了那些命令??U盘该如何回复这些命令呢?

#8


引用 7 楼 asanpyx 的回复:
当PC执行格式化之后,PC都发送了那些命令??U盘该如何回复这些命令呢?


你既然读写都正常了,为什么还不了解PC文件系统对磁盘操作?
首先你在主机上通过文件系统操作U盘(格式化,格式化后读写磁盘),都是文件系统完成。格式化是文件系统的初始化,当然这些数据也要写到磁盘上的固定位置(对于U盘来说,就是逻辑扇区固定,具体物理地址就是你固件程序所要完成的工作了)。U盘一般都是使用SCSI协议完成数据包解析的吧(Usb协议只是传输协议,具体使用什么协议解析数据,那是根据具体USB设备而定了-- 看了几个月USB的理解,应该如此)。你可以到网上找些USB Mass Storage实现的SCSI协议文档。

#9


引用 6 楼 kevinyujm 的回复:
问题猜不出来。
建议你使用bushound配合程序调试,以确定具体原因。

#10


这个是U盘自己的事情了。

#11



格式化就是重写文件系统的基本扇区。你执行它发来的读写命令就可以了。