[其他芯片] 知识变现之CH376实现U盘读写方案

引:


      项目需求:将主机数据通过串口写到外部U盘中,主机只有一个串口可以使用,无法扩展别的接口。
      项目周期:一周完成。
      项目预算:20元以内

一、方案确定:

      针对这个需求以及时间,想到了沁恒。或许有类似的芯片可以使用,寻求技术支持之后,推荐使用CH376来实现,申请了开发板、三个样片,第二天就拿到手。配合需要的东西。



二、开发板验证

      拿到开发板之后,先把几个关键的资料搞到手,最好的方式就是官网直接下载,绝对是一手资料,原理图、PCB、丝印图、上位机验证软件、芯片手册、开发板说明。

      开发板原理图:



      丝印图:



      工具包:



三、动手开做

      使用上位机软件进行仿真串口,直接写到U盘中数据。跳线帽要选择正确,按照手册上的指引进行选择。

      打开上位机软件



      选择串口按步骤进行选择,查看COM口号,打开串口,然后获取版本号,第一部分很重要,由于CH376有多种模式,串口方式、SPI方式、U盘方式、SD卡方式等等。在这里需要设置模式6,属于外接U盘方式。



      发送指令之后,我们会看见开发板的红灯亮了。



      磁盘初始化部分,检测磁盘是否就绪,发送检测磁盘就绪指令,在信息栏返回如下指令:

16:55:19        磁盘就绪:0x14 磁盘信息: SanDisk Cruzer Blade 1.00


      证明磁盘状态良好。我们对文件操作。这里有创建文件,打开文件,设置偏移写数据等等;



      下面都有很好的说明性的文字。我们试着创建\AABBCC.TXT文件,然后写入123456.



      可以看到下面写入成功了,只要返回值为0x14,证明成功了。

16:55:19        磁盘就绪:0x14 磁盘信息: SanDisk Cruzer Blade 1.00

16:58:23        创建文件名: \AABBCC.TXT 返回值:0x14

16:58:27        请输入文件名 8+3格式 字母必须大写

16:58:33        打开文件名: \AABBCC.TXT 返回值:0x14

16:58:41        写文件长度:6 返回值:0x14


      我们将U盘接到电脑中,查看是否真的建立文件,并写入了内容。



      打开AABBCC.TXT文件



      实验成功。

四、抓包

      由于项目紧急,上位机实现的功能,正是项目所需要的,可以用最简单的方式进行。安装虚拟串口软件(VSPD)。模拟串口发出的数据。



      设置为COM4和COM5端口,然后打开软件和串口调试助手



      波特率设置一样9600,8,N,1

      我们逐条进行解析操作,初始化部分是必不可少的。

57 AB 15 06

      创建文件

57 AB 2F 5C 41 41 42 42 43 43 2E 54 58 54 00 57 AB 34

      打开文件

57 AB 2F 5C 41 41 42 42 43 43 2E 54 58 54 00 57 AB 32

      关闭文件

57 AB 36 01



五、进行单片机串口代码编写

      这里以沁恒的CH32F103C8T6为例进行书写:

      串口初始化
 

static void NVIC_Configuration(void)

{

      NVIC_InitTypeDef NVIC_InitStructure;

               

      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

      NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;

      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

      NVIC_Init(&NVIC_InitStructure);

}

void USART2_Config(void)

{

                GPIO_InitTypeDef GPIO_InitStructure;

                USART_InitTypeDef USART_InitStructure;

                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

               

                RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

                GPIO_Init(GPIOA, &GPIO_InitStructure);

                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

                GPIO_Init(GPIOA, &GPIO_InitStructure);

               

                USART_InitStructure.USART_BaudRate = 9600;

                USART_InitStructure.USART_WordLength = USART_WordLength_8b;

                USART_InitStructure.USART_StopBits = USART_StopBits_1;

                USART_InitStructure.USART_Parity = USART_Parity_No ;

                USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

                USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

                USART_Init(USART2, &USART_InitStructure);

               

                NVIC_Configuration();

               

                USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);       

               

                USART_Cmd(USART2, ENABLE);               

}

      数据发送代码编写,可以参考开发包里面的51例程进行改写。这里就不赘述了。

六、打板、加急、焊接、验证

      按照提供的封装、原理图、PCB图进行CH376的PCBA制作,加急,项目完结,总共用了4天时间。包括调试,提前完成任务。
---------------------
作者:单片小菜
链接:https://bbs.21ic.com/icview-3226710-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值