[MCU] 【CH579M-R1】+U盘读/写

jinglixixi   2020-10-15 18:57 楼主

关于U盘读/写的一个有趣测试,在官网的例程中只提供了U盘创建新文件的示例,其功能是生成一个文本文件。

  1. 首先按图1所示来搭建测试电路;
  2. 将编译好的测试程序下载到开发板;
  3. 打开串口调试工具并运行例程,则执行效果如图2所示。

image-20201015185702-1.png

图1测试电路

 

image-20201015185702-2.png

图2 创建与写入结果

 

将U盘插入电脑后,在U盘中果真能见到新生成的文件NEWFILE1.TXT,其内容如图3所示。

image-20201015185702-3.png

图3 文件内容

 

有了写入功能固然可喜,但怎么读取呢?

在例程中却没了下文,参照其他的资料,自行补充了读取程序,其执行效果如图4所示。

image-20201015185702-4.png

图4 读取结果

 

可问题是我写入的明明是“Note:这个程序是以字节为单位进行U盘文件读写,简单演示功能。”,怎么读取得前100个字符却成了与写入内容没一点关系的100个“CCCCCCCCCC...”呢?问题出在何处呢?

后来才发现原来问题出现在下面的语句上:

for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ )  printf( "%C", mCmdParam.ByteRead.mByteBuffer );

上,应改为:

for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ )  printf( "%c", mCmdParam.ByteRead.mByteBuffer );

ROK.jpg 图5 正确读取结果

读取的问题终于解决了!

 

另外一个我所关心的问题是如何生成一个BMP图像文件,便以存储二进制数的方式,生成了一个以BMP为后缀的文件。随后麻烦也就来了。

什么情况?

那就是它真的生成了该名称的文件,但问题是你既不能以WinHex工具软件来查看其内容,也不能自由地将其删除。如果这样实验下去,结果只有一个,那就是重新格式化U盘,否则就没法用了,但格式化的方法也未必好使。

那怎么办呢?只能以毒攻毒了,起初是在开发板上以文件删除的程序将其删除,但遗憾的是没能成功。那还能怎么办呢?

于是先以同样的文件名在开发板上生成一个文本文件,然后再删除该文件。这次果然成功了,这个顽疾算是从U盘给拔除了!

删除文件的效果如图6所示

image-20201015185702-5.png

图6 删除文件

在文件操作中,若指定的文件目录不存在,则会列出根目录下的所有文件,见图7所示。

image-20201015185702-6.png

图7 列出根目录文件

 

那在文件中是否能写入二进制的字节数据呢?当然是可以的,你看下面这段程序不是清楚地将回车换行符都写到文件里了吗。

printf( "ByteWrite\n" );

i = sprintf( (PCHAR)buf,"Note: \xd\xa这是一个以字节为单位进行U盘读写的简单示例。\xd\xa");

mCmdParam.ByteWrite.mByteCount = i;

mCmdParam.ByteWrite.mByteBuffer = buf;

s = CH579ByteWrite( );

mStopIfError( s );

printf("写入成功\n");

后面会继续探索BMP文件的生成方法及文件的读取,以便实现在该开发板上实现数码相框的功能。

 

本帖最后由 jinglixixi 于 2020-10-18 10:45 编辑

回复评论 (1)

玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2020-10-19 10:37
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复