1. 选型

型号

接口

功能

备注

电源

CH372

并口

USB_Device

全速 USB 设备接口,兼容 USB V2.0

3.1-3.6

4.2-5.4

CH374

SPI/并口

Host/Device都可以,F/U封装可以扩3个USB口

支持 1.5Mbps 低速和 12Mbps 全速 USB 通讯,兼容 USB V2.0

3.0-3.6

4.4-5.3

CH375

并口/串口(只能在USB_HOST下使用)

Host/Device

支持 1.5Mbps 低速和 12Mbps 全速 USB 通讯,兼容 USB V2.0。作为设备兼容CH372

3.1-3.6

4.2-5.4

CH376

SPI/串口/并口

主要做U盘、SD卡读写。USB为低速/全速

支持 1.5Mbps 低速和 12Mbps 全速 USB 通讯,兼容 USB V2.0

3.0-3.6

4.3-5.3

CH378

SPI/串口/并口

主要做U盘、SD卡读写。USB为全速/高速

支持USB2.0全速以及USB2.0高速。

V33:2.7-3.6

V18:1.65-1.95

CH370

SPI/并口

USB_Host

支持 1.5Mbps 低速和 12Mbps 全速 USB 通讯,兼容 USB V2.0

支持 5V 电源电压和 3.3V 电源电压,内置电源上电复位。CH370V 只支持 3.3V 电源电压。

3.0-3.6

4.5-5.3

注释:CH37x电源有两个范围(除了CH378为两个电源供电),电源典型值分别为3.3V和5V。不同的供电电压,芯片的最小系统原理图是不一样的。最明显的区别在于V3脚的链接处理。在5V供电的时候,V3脚连接0.01uF的退耦电容到地即可;在3.3V供电的时候,V3脚需要连接到VCC。具体可以看下面两个原理图。红框部分很明显的区别。

2. CH37x系列的芯片很多,上面的表格分类也是只把一些基础的信息放在了上面。但是具体项目的时候该怎么选择。

  1. CH370

   这个芯片只有主机功能

  2. CH372

  这个是WCH一颗比较经典的芯片,主要功能就是作为一个USB_Device与电脑或者USB_Host链接实现USB数据的传输的,因为接口是使用的并口,所以占用的IO数量比较多,可以使用STM32的FSMC去控制。使用CH372作为USB_Device拓展,电脑装上CH372驱动后,可再PC端识别为CH372设备,简单实现数据上下传。

  3.CH374

  CH374这个芯片有两个版本,一个是普通的CH374T等封装,这个就是一个SPI、串口、并口去扩展一个USB2.0全速Host/Device的USB接口芯片。而CH374F,CH374U是有Hub根集线器的一个USB扩展芯片。即实现SPI/并口去扩展出3个USB口,类似于HUB扩展的功能,不过是接口扩展USB。可以实现单片机通过374扩展出USB_Host,然后去识别键鼠、打印机、CDC设备、游戏手柄等等。这边从枚举到数据传输,都需要用户根据电脑枚举这些设备的步骤去模拟。CH374也可以作为Device使用,芯片作为设备有两个模式选择,一个是内置固件模式,再USB_Mode设置这边选择这个内置固件模式后,芯片即可自动完成CH372设备的枚举过程。如果需要做其它的设备,则需要用户选择外置固件模式,自己去做设备的枚举以及后续数据的传输。

  4.CH376/CH378

  目前CH376的版本号为:0x45;

  目前CH378的版本号为:0x42;

  这两个芯片主要是被用作U盘或者SD卡的读写。对于不想在自己MCU代码里面加入FATFS以及USB开发的工程师而言,是一个不错的选择。

  两颗芯片的主要功能基本都是一样的。区别就在于速度以及模式上的区别。CH376的USB为低、全速,而CH378的USB接口为高速。与主控芯片连接的接口方面CH378的接口速度大于CH376,所以实际文件传输方面,速度会略快于CH376。

  USB模式方面,两颗芯片都可以做USB_Device以及USB_Host。USB_Device也拥有内置固件模式(及无需用户做USB设备枚举阶段的代码,PC安装372驱动),PC端的设备管理器就能识别出一个372设备没用于USB数据的批量上下传。外置固件模式,就是使用者自己做好枚举的过程(使用者自己将CH37x系列的USB在电脑端识别为HID、CDC、大容量设备等)。主机模式都是一样的,实现对U盘或者SD卡的读写(比较简单)。也可以实现对对键鼠的识别等。最大的区别在于,0x43固件版本的CH378加入了读卡器模式(08H),设置完模式之后,就可以实现读卡器功能,在PC上识别出存储设备,并进行读写操作。

3. 常见问题

  CH376/CH378

  1. 接口通讯不正常,无法对芯片进行操作

  答:遇到这个问题,首先需要判断硬件上是否正确。检查芯片的电源脚是否在手册需求范围之内,CH376的V3脚硬件设计区别(根据芯片供电电压有区别,在文章上面有详细说明)。看晶振是否起振,芯片的复位引脚电平是否正确,以及接口选择相关的引脚电平是否正确。其次看一下接口通讯的时序是否满足手册的需求。例如SPI时序,CS片选信号需要按照手册需求来。如下图:在一个CS拉低的边沿里面完成了命令,数据的发送,以及读取。

  2. 磁盘初始化过不去,U盘无法实现读写

  答:检查以下几点:(1)接口通讯是否正常,不正常就看上面第一条。(2)看一下U盘,U盘的文件格式是否满足FAT12/FAT16/FAT32;存储容量大小满足小于等于32GB的需求。如果是USB3.0的U盘,需要确认那个U盘可以插入2.0的接口。然后还有一个比较重要的是,如果用户使用的U盘是做过系统盘的,那么需要使用第三方的格式化工具把U盘格式化后,在把文件系统改为CH37x要求的配置。

  3. 有关于CH376/CH378串口通讯,波特率修改的相关问题。

  答:两颗芯片如果是使用串口接口进行通讯的话,会涉及到波特率的设置。设置有两种方式:

  (1)上电时,芯片部分引脚的高低电平设置。

    对于CH376,会在上电的时候检测SDI/D6,SCK/D5,以及BZ/D4三个引脚的电平状态,从而修改默认的串行通讯波特率。

    

       对于CH378,会在上电的时候检测SDI,SDO,以及SCK三个引脚的电平状态,从而修改默认的串行通讯波特率。

  (2)串口命令修改波特率

    两颗芯片都是支持以硬件默认波特率上电,通过CMD_SET_BAUDRATE命令去设置后续的串口通讯波特率,在设置完串口波特率之后,需要尽快在1ms以内将对应通讯主控芯片的串口波特率也设置到相同。

        以下为CH376设置的值

      CH378相对复杂一点,不过总体的流程都是类似的。

  

  在代码方面,以STM32的程序为例,大概流程如下:

  

  首先发送设置波特率的命令,然后发送对应的波特率的值,03 cc按照CH376的手册对应给的就是115200波特率。再修改完CH376的波特率之后,立刻修改STM32F103的串口波特率,最后读取返回值是否正确,正确则表示双方波特率修改成功。

  

  4. CH376/CH378初始化都没有问题,但是创建文件出错,或者创建文件,写入数据后,实际里面没有内容。

  答:这个问题,一般是使用者没有按照手册需求创建短文件名,或者创建函数写的有一些问题导致的。

    需求:路径名首字符必须是斜杠/或者\,所有字符必须是大写字母、数字或者中文汉字以及某些特殊字符,文件名长度不超过11个字符:8字符长度主文件名 . 扩展名不超过3字符。长文件名另外考虑。可以参考沁恒官方例程EXAM11。或者在个人Gitee上下载STM32F103创建长文件名的驱动代码(暂时还未上传)。

    下面是SPI时序下,控制CH378与STM32芯片通讯创建文件的时序,提供参考。

  

5. 相关测试工具

  答:在WCH官网下载CH376EVT。里面有一个检测CH376是否正常工作的软件

4. 眼图测试

USB的眼图测试是由一套详细的规范要求的。测试框图如下:

测试框图如上图。

  5. CH376磁盘容量获取U盘容量大小运算

  

使用函数CH376DiskCapacity();实现读取U盘容量,读出的数值为扇区的数量,例如读取一个28.8GB的U盘,读出的扇区数为60620799

  

60620799*扇区字节512/10241024/1024=28.8GB

WCH沁恒 CH37系列芯片选型以及常见问题的处理(CH376/CH378)的更多相关文章

  1. 沁恒CH32F103C8T6的开发和烧录配置说明

    概述 CH32F1系列是沁恒生产的32位Cortex-M3 MCU, 片上集成了时钟安全机制.多级电源管理. 通用DMA控制器等. 此系列具有 2 路 USB2.0接口.多通道 TouchKey. 1 ...

  2. 沁恒CH32F103C8T6(三): PlatformIO DAPLink和WCHLink下载配置

    目录 沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录 沁恒CH32F103C ...

  3. 沁恒CH32V003F4P6 开发板上手报告和Win10环境配置

    CH32V003 沁恒最近推出的低价CH32V003系列, 基于青稞RISC-V2A内核, 48MHz主频, 2KB SRAM, 16KB Flash, 工作电压兼容3.3V和5V. 主要参数如下 S ...

  4. 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录

    目录 沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录 StdPeriphLi ...

  5. 沁恒CH32V103C8T6开发环境笔记

    CH32V103C8T6 CH32V103C8T6是沁恒的RISC-V内核MCU, 基于RISC-V3A处理器, 内核采用2级流水线处理,设置了静态分支预测.指令预取机制,支持DMA. 主要参数如下 ...

  6. 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置

    目录 沁恒CH32V003(一): CH32V003F4P6开发板上手报告和Win10环境配置 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置 硬件准备 沁 ...

  7. NFC芯片选型及基本电路框架

    RFID作为一项专业度较高的技术,在一些公司,可能还会专门招聘专业的RFID工程师.本篇阐述的涉及到的只是基本选型设计.电路框架,关于RFID天线调试.低功耗检卡调试等,后续再其他篇章会继续更新! N ...

  8. 沁恒CH32V103C8T6(二): Linux RISC-V编译和烧录环境配置

    目录 沁恒CH32V103C8T6(一): 核心板焊接和Windows开发环境配置 沁恒CH32V103C8T6(二): Linux RISC-V编译和烧录环境配置 硬件准备 CH32V103 开发板 ...

  9. 爱特梅尔ATMEL全系列芯片解密单片机破解

    爱特梅尔ATMEL全系列芯片解密单片机破解 ATMEL芯片介绍: ATMEL公司为全球性的业界领先企业,致力于设计和制造各类微控制器.电容式触摸解决方案.先进逻辑.混合信号.非易失性存储器和射频 (R ...

  10. 在keil 4中添加stc系列芯片的方法--【sky原创】

    在keil 4中添加stc系列芯片的方法: 1.从官网下载uv3.cdb的文件网址是:http://www.stcmcu.com/ 2.下载好后把uv3.cdb文件改成STC.cdb:3. 然后将[S ...

随机推荐

  1. 【C++】GoogleTest进阶之gMock

    gMock是什么 当我们去写测试时,有些测试对象很单纯简单,例如一个函数完全不依赖于其他的对象,那么就只需要验证其输入输出是否符合预期即可. 但是如果测试对象很复杂或者依赖于其他的对象呢?例如一个函数 ...

  2. go channel原理及使用场景

    转载自:go channel原理及使用场景 源码解析 type hchan struct { qcount uint // Channel 中的元素个数 dataqsiz uint // Channe ...

  3. SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

    项目依赖 SpringBoot 2.5.5 SpringCloud 2020.0.4 Alibaba Spring Cloud 2021.1 Mybatis Plus 3.4.0 Seata 1.4. ...

  4. 三、Ocelot请求聚合与负载均衡

    上一篇文章介绍了在.Net Core中如何使用Ocelot:https://www.cnblogs.com/yangleiyu/p/16847439.html 本文介绍在ocelot的请求聚合与负载均 ...

  5. VideoPipe可视化视频结构化框架新增功能详解(2022-11-4)

    VideoPipe从国庆节上线源代码到现在经历过了一个月时间,期间吸引了若干小伙伴的参与,现将本阶段新增内容总结如下,有兴趣的朋友可以加微信拉群交流. 项目地址:https://github.com/ ...

  6. 基于python的数学建模---分支定界算法

    zip函数 a = [1,2,3,4]b = [5,6,7,8]i = sum(x * y for x, y in zip(a, b))print(i)70 floor and ceil 函数 imp ...

  7. rpm环境安装dpkg包管理工具

    rpm环境安装dpkg包管理工具 索引:dpkg-scanpackages.dpkg.dpkg-query.dpkg-source.dpkg-scansource 在centos.redhat.麒麟服 ...

  8. Selenium4+Python3系列(八) - Cookie、截图、单选框及复选框处理、富文本框、日历控件操作

    我所在的城市昨天出了近20+的阳性案例,但这丝毫没有 "影响" 到996的工作时间,当然,也没有影响到我想继续更新文章的决心. 一.cookie常用操作入门 上一篇有写过关于coo ...

  9. javaSE--核心之一:IO流

    Java IO流框架结构: IO的主要内容包括输入.输出两种IO流,这两种流中又分为字节流和字符流,字节流是以字节为单位来处理输入.输出流,而字符流是以字符为单位来处理输入.输出流. InputStr ...

  10. 【Datawhale】动手学数据分析

    动手学数据分析 第一章:数据载入及初步观察 载入数据 任务一:导入numpy和pandas import numpy as np import pandas as pd 任务二:载入数据 train_ ...