jinglixixi 发表于 2020-10-15 18:57

【CH579M-R1】+U盘读/写

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

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

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

<p></p>

<p>图1测试电路</p>

<p>&nbsp;</p>

<p></p>

<p>图2 创建与写入结果</p>

<p>&nbsp;</p>

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

<p></p>

<p>图3 文件内容</p>

<p>&nbsp;</p>

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

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

<p></p>

<p>图4 读取结果</p>

<p>&nbsp;</p>

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

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

<p>for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) &nbsp;printf( &quot;%C&quot;, mCmdParam.ByteRead.mByteBuffer );</p>

<p>上,应改为:</p>

<p>for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) &nbsp;printf( &quot;%c&quot;, mCmdParam.ByteRead.mByteBuffer );</p>

<p>图5 正确读取结果</p>

<p>读取的问题终于解决了!</p>

<p>&nbsp;</p>

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

<p>什么情况?</p>

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

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

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

<p>删除文件的效果如图6所示</p>

<p></p>

<p>图6&nbsp;删除文件</p>

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

<p></p>

<p>图7 列出根目录文件</p>

<p>&nbsp;</p>

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

<p>printf( &quot;ByteWrite\n&quot; );</p>

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

<p>mCmdParam.ByteWrite.mByteCount = i;</p>

<p>mCmdParam.ByteWrite.mByteBuffer = buf;</p>

<p>s = CH579ByteWrite( );</p>

<p>mStopIfError( s );</p>

<p>printf(&quot;写入成功\n&quot;);</p>

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

<p style="text-align:justify">&nbsp;</p>

okhxyyo 发表于 2020-10-19 10:37

<p><a href="https://bbs.eeworld.com.cn/thread-1140005-1-1.html" target="_blank">沁恒CH579M-R1开发板测评</a></p>

<p>汇总贴:<a href="https://bbs.eeworld.com.cn/thread-1140005-1-1.html">https://bbs.eeworld.com.cn/thread-1140005-1-1.html</a></p>
页: [1]
查看完整版本: 【CH579M-R1】+U盘读/写