【沁恒微CH32V307评估板试用体验】U盘读写操作 - RISC-V MCU技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

[文章]

【沁恒微CH32V307评估板试用体验】U盘读写操作

本帖最后由 HonestQiao 于 2022-5-25 21:22 编辑

在CH32V307评估板上,提供了两个连接主芯片USB2.0高速通信接口的端口,可以通过Type-C接口,连上U盘操作。其具体的接口,见下图中的7和8:


poYBAGJU7WaAUt8TAA3H8XaB23g640.jpg


我这边实际连接时,使用Type-C转普通USB A母头,然后再连接上普通的U盘。

WechatIMG3251.png

支持的U盘文件格式,包括FAT12/FAT16/FAT32,一般使用FAT32就成。

在"CH32V307EVT 应用例程"中,EXAM/USB/USBHS/HOST_Udisk例程,即为U盘读写的例程。
U盘操作部分,需要调用EXAM/USB/USBHS/Udisk_Lib 操作库。

其中核心的部分,为以下四个方面:
一、挂载U盘,检查状态:
iShot_2022-05-25_20.42.08.png
上述代码中,涉及到U盘操作的部分,主要有:
  • USBHS_Hostinit(ENABLE):启用USB Host模式,可以操作USB设备;DISABLE则表示取消Host模式;一个来回,就表示再次挂载
  • USBHS_HostEnum():枚举挂载的USB设备
  • CHRV3DiskReady():检查USB DISK是否准备好

一旦检测到USB DISK已经准备好了,就可以进行下一步操作,开始U盘的读写了。

二、写数据到U盘文件:
iShot_2022-05-25_20.49.06.png
在上述代码中,关键的调用为:
  • CHRV3FileOpen():打开U盘文件
  • CHRV3FileCreate():如果打开失败,我们可以创建一个新的文件
  • CHRV3ByteWrite():写入数据,
  • CHRV3FileModify():修改文件属性
  • CHRV3FileClose():关闭U盘文件

在上述代码中,有一个非常关键的全局量mCmdParam,关系到对U盘的各项具体操作,其定义如下:
iShot_2022-05-25_20.55.03.png
在上述U盘写数据操作部分的代码中,涉及到mCmdParam的如下几个属性:
  • mCmdParam.Open.mPathName:要打开的文件的路径
  • mCmdParam.Create.mPathName:要创建的文件的路径
  • mCmdParam.ByteWrite.mByteCount:写入时的数据长度
  • mCmdParam.ByteWrite.mByteBuffer:写入时的数据buf
  • mCmdParam.Modify.mFileAttr:文件属性,如为0xFF则不修改属性
  • mCmdParam.Modify.mFileTime:文件修改时间,如为0xFFFF则不修改
  • mCmdParam.Modify.mFileDate:新的文件日期,需要使用MAKE_FILE_DATE( 2022, 5, 25 )生成
  • mCmdParam.Modify.mFileSize:新的文件长度,如为0xffffffff则表示不修改,但可有下一个属性自动设置
  • mCmdParam.Close.mUpdateLen:关闭时,自动计算文件长度,通常应该设置为1

三、追加数据到U盘文件:
对于一个已经存在的文件,我们可以追加数据到其尾部,操作的代码如下:
iShot_2022-05-25_21.06.35.png
其中有一个关键的设置:
  • mCmdParam.ByteLocate.mByteOffset:表示在文件数据中的指针,如为0xffffffff,则表示在文件尾部
其对应的调用为:
  • CHRV3ByteLocate( ):表示根据上述设置的值,定位到文件数据中的具体位置,后续操作就在该位置开始进行
四、从U盘文件中读取数据:
现在,U盘文件中,已经包含了数据,我们就可以读取其中的数据了“
iShot_2022-05-25_21.10.50.png
在首次读取U盘文件数据时,最好先使用mCmdParam.ByteLocate.mByteOffset设定偏移指针,并使用CHRV3ByteLocate( )定位。
在上述代码中,关键的调用为:
  • CHRV3ByteRead( ):读取数据
为了配合读取数据,我们还需要设置mCmdParam对应的属性:
  • mCmdParam.ByteRead.mByteCount:要读取的数据长度
  • mCmdParam.ByteRead.mByteBuffer:读取后存放数据的buf
在读取调用后,mCmdParam.ByteRead.mByteCount表示当前实际读取的数据长度,如果其长度小于调用前的设置,表示已经读取到了文件尾部了。

通过以上的操作,我们就可以很方便的操作U盘,使用U盘存储数据,和提供需要处理的数据了。



更多回帖

×
发帖