文中介绍的可能有一些繁琐,因为也是想解释的更清楚一些,但是小弟希望大家能认真看完。

市面上关于ch376串口的知识介绍不多,可以说基本没有,博主当时也废了一些力气,在此希望给大家一些帮助,认真看完绝对会使用ch376读、写、txt、csv文件。  (在此提一嘴,ch375这款芯片确实也能使用串口读写U盘,但是375的数据传输不是常规的8位数据传输,也就是说我们调起来会非常的费劲,376是常规的8位数据传输,建议大家使用ch376)

ch376使用串口通讯时,波特率为9600、数据以十六进制发送

一、读txt文件

发送的命令命令用途正常返回数据
57 AB 06 EE测试通讯接口和工作状态(EE为测试数据,返回按位取反,也就是11)11
57 AB 15 06选择U盘模式51 15
57 AB 30检查磁盘是否连接14
57 AB 31初始化磁盘14
57 AB 2F 31 2E 54 58 54 00设置将要操作的文件(31 2E 54 58 54为文件名1.TXT,以00结尾)不返回
57 AB 32打开文件14
57 AB 3A 04 00设置要读取的字节数(04 00为要读取四个字节数据,采用大端对齐。如果要读取1个字节数据,则发送01 00)1D
57 AB 27读取数据返回 字节数+1.TXT中的数据
57 AB 3B继续字节读指令14

大家千万不要把最后一条指令57 AB 3B遗忘了,这时候有人问:“我只写一次,为什么还要发送继续字节读呢?”,,,官方数据手册中规定(虽然我试过不加也好使,但咱们还是做个乖宝宝,跟着手册来,哈哈哈) 

现象:

        

                  所创建的文件及内容                                                使用ch376读取返回的数据
 

二、写txt文件

发送的命令命令用途正常返回数据
57 AB 06 EE测试通讯接口和工作状态(EE为测试数据,返回按位取反,也就是11)11
57 AB 15 06选择U盘模式51 15
57 AB 30检查磁盘是否连接14
57 AB 31初始化磁盘14
57 AB 2F 32 2E 54 58 54 00设置将要操作的文件(32 2E 54 58 54为文件名2.TXT,以00结尾)不返回
57 AB 34打开文件14
57 AB 3C 02 00设置要写入的字节数(02 00为要读取四个字节数据,采用大端对齐。如果要写入1个字节数据,则发送01 00)1E
57 AB 2D 31 32写入数据所写入的字节数(本例子中是02)
57 AB 3D继续字节写指令14
57 AB 36 31关闭文件并保存14

大家千万千万不要把最后两条指令57 AB 3D    57 AB 36 31遗忘了,这个和读的时候还不太一样,读的时候不加好使,写的时候不加这两条指令,数据不会保存。数据只在内存中,而不被写入到文件中

现象:

  

 三、创建CSV文件并写入数据 (U盘中事先没有这个文件)

在说指令之前,首先说一些要写表格文件需要注意的问题,我们写表格总要换行换列写吧,不可能在一个单元格中存放所有的数据吧,所以我们需要注意换行换列问题

换行:0X0D   0X0A             换列:0X2C  0X20

     

命令介绍:

发送的命令命令用途正常返回数据
57 AB 06 EE测试通讯接口和工作状态(EE为测试数据,返回按位取反,也就是11)11
57 AB 15 06选择U盘模式51 15
57 AB 30检查磁盘是否连接14
57 AB 31初始化磁盘14
57 AB 2F 31 2E 43 53 56 00设置将要操作的文件(31 2E 43 53 56为文件名1.CSV,以00结尾)不返回
57 AB 34打开文件14
57 AB 3C 04 00设置要写入的字节数(04 00为要读取四个字节数据,采用大端对齐。如果要写入1个字节数据,则发送01 00)1E
57 AB 2D 31 2C 20 32写入数据(这里注意,我们上一条指令设置本次写入的字节数为04,但由于换列操作2C 20占了两个字节,所以说实际传输的数据为两个字节,分别为31 32)所写入的字节数(本例子中是04)
57 AB 3D继续字节写指令14
57 AB 36 31关闭文件并保存14

 四、追加CSV文件中的数据 (U盘中事先就有这个文件,在最后追加数据)

 除28行、29行、31行外追加数据与上面介绍的三 没有什么区别,下面就着重说一些28 29 31

28:由于我们实在原有文件中追加数据,所以只需打开原有文件就行,所以是命令 57 AB 32 而不是创建命令 57 AB 34

29:因为我们追加数据肯定是在最后追加,所以需要将指针调整至数据尾端,57 AB 39 FFFFFFFF

其中FFFFFFFF就是代表末尾的意思,也就是最后一个数据所在的单元格

31:为什么传输的数据要先加一个0D 0A? 因为我们调整完指针之后,指向最后一个单元格,所以需要先来一个换行指令0D 0A,使指针指向新的单元格。

       

 没加0D 0A直接补加数据 3、4                        加了0D 0A后补加数据 3、4

五、完整工程链接

该工程是基于STM32单片机开发的,使用USART2与CH376进行通讯,将数组中的数据写入到CSV文件中(也兼容TXT文件,只需稍作修改即可,有问题可联系博主。

基于STM32+CH376串口模式读写U盘-淘宝网 (taobao.com)

有疑问的地方欢迎大家指正,评论或私聊都可以

能否看在小弟如此细致分享的份上,给个关注吧,各位铁铁!!

制作不易,感谢大家支持,感谢!!!!!!

  --------------一个正在努力的人

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐