关于CH376的一些使用总结

一、背景简介:

CH376是一款USB接口芯片,可以使用SPI接口或串口或并口扩展一个通用USB接口出来。

二、芯片特点:

1.该芯片内置了一个文件管理系统,可以方便操作FAT12、FAT16、FAT32文件系统的存储设备、比如大部分的U盘和SD卡。

2.提供了SPI、串口、并口等常用接口,方便大部分情况下的使用。

3.提供了USB接口和SPI主机口,可以操作U盘或者SD卡。

三、电路设计:

在进行电路设计之前需要确定两件事,芯片的供电电压、芯片使用的接口。供电不同、接口不同电路就不同。

1.供电,VCC=5V供电时,V3引脚需要连接一个0.01uF的电容接到GND。

VCC=3.3V供电时,V3引脚要和VCC引脚连接在一起。

2.接口,芯片的接口选择是根据上电时WR#、RD#、PCS#、A0、RXT、TXD的引脚状态决定。

3.USB接口,USB接口部分需要连接一个大点的电容(几十uF)接到GND。

4.晶振部分,在XI引脚内部内置了一个电容,所以只需要在XO引脚添加电容即可。

四、程序设计:

官方有提供很多基于51单片机的例程,包括U盘,做各种常用设备和主机的参考代码,可以在提供的例程基础上做一个移植。参考例程大都是基于这四个函数使用的,xWriteCH376Cmd(),xWriteCH376Data(),xReadCH376Data(),Query376Interrupt(  ),所以只要把自己的硬件接口与这些函数对应即可。

1.接口函数调试方法:

接口函数调试的核心思想就是,将输出的波形调成满足手册需求的波形。

测试的方式也很简单,CH376有一个取反命令,可以将输入的数据按位取反再返回,如果返回的数据正确取反,那么就可以确认接口三个接口函数是正确的(无法测试中断函数是否正确)。

2.接口函数举例:使用STM32单片机IO口模拟SPI接口,控制CH376。

/*======CH376T  IO定义======*/
#define     CH376T_SDI_HIGH             GPIO_SetBits(GPIOB, GPIO_Pin_15)    //CH376T SDI
#define     CH376T_SDI_LOW              GPIO_ResetBits(GPIOB, GPIO_Pin_15)
#define     CH376T_SDO_HIGH             GPIO_SetBits(GPIOB, GPIO_Pin_14)    //CH376T SDO
#define     CH376T_SDO_LOW              GPIO_ResetBits(GPIOB, GPIO_Pin_14)
#define     CH376T_SCK_HIGH             GPIO_SetBits(GPIOB, GPIO_Pin_13)    //CH376T 时钟SCK
#define     CH376T_SCK_LOW              GPIO_ResetBits(GPIOB, GPIO_Pin_13)
#define     CH376T_CS_HIGH              GPIO_SetBits(GPIOB, GPIO_Pin_12)    //CH376T 片选CS
#define     CH376T_CS_LOW               GPIO_ResetBits(GPIOB, GPIO_Pin_12)
#define     CH376T_RST_HIGH             GPIO_SetBits(GPIOB, GPIO_Pin_11)    //CH376T 复位RST
#define     CH376T_RST_LOW              GPIO_ResetBits(GPIOB, GPIO_Pin_11)
#define     CH376_INT_WIRE              GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10) //中断 INT/**************************************************************************************************
** 函数名称: Spi376OutByte
** 功能描述: 模拟SPI输出8位数据
** 输   入: d-SPI发送的数据
** 输   出: 无
*******************************************************************************************************/
void    Spi376OutByte( UINT8 d )
{UINT8  i;for ( i = 0; i < 8; i ++ ) {CH376T_SCK_LOW;        //CH376_SPI_SCK = 0;if ( d & 0x80 ) {CH376T_SDI_HIGH;   //CH376_SPI_SDI = 1;}  else CH376T_SDI_LOW;   //CH376_SPI_SDI = 0;d <<= 1;               /* 数据位是高位在前 */CH376T_SCK_HIGH;       //CH376_SPI_SCK = 1;  /* CH376在时钟上升沿采样输入 */}
}/**************************************************************************************************
** 函数名称: Spi376InByte
** 功能描述: 模拟SPI输入8位数据
** 输   入: 无
** 输   出: SPI接收的数据
*******************************************************************************************************/
UINT8   Spi376InByte( void )
{UINT8  i, d;d = 0;for ( i = 0; i < 8; i ++ ) {CH376T_SCK_LOW;          //CH376_SPI_SCK = 0;  /* CH376在时钟下降沿输出 */d <<= 1;                 /* 数据位是高位在前 */if ( GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) ) d ++;CH376T_SCK_HIGH;         //CH376_SPI_SCK = 1;}return( d );
}/* SPI片选无效,结束CH376命令,仅用于SPI接口方式 */
void    xEndCH376Cmd( void )
{ CH376T_CS_HIGH;
}/**************************************************************************************************
** 函数名称: xWriteCH376Cmd
** 功能描述: 向CH376写命令操作
** 输   入: mCmd-发送的命令
** 输   出: 无
*******************************************************************************************************/
void    xWriteCH376Cmd( UINT8 mCmd )  /*  */
{mDelay0_5uS( );CH376T_CS_LOW;           //CH376_SPI_SCS = 0;  /* SPI片选有效 */Spi376OutByte( mCmd );   /* 发出命令码 */mDelay0_5uS( ); mDelay0_5uS( ); mDelay0_5uS( );  /* 延时1.5uS确保读写周期大于1.5uS,或者用上面一行的状态查询代替 */
}/**************************************************************************************************
** 函数名称: xWriteCH376Data
** 功能描述: 向CH376写数据操作
** 输   入: mData-发送的数据
** 输   出: 无
*******************************************************************************************************/
void    xWriteCH376Data( UINT8 mData )  /* 向CH376写数据 */
{Spi376OutByte( mData );mDelay0_5uS( );  /* 确保读写周期大于0.6uS */
}/**************************************************************************************************
** 函数名称: xReadCH376Data
** 功能描述: 读取CH376的数据
** 输   入: 无
** 输   出: CH376返回的数据
*******************************************************************************************************/
UINT8   xReadCH376Data( void )  /* 从CH376读数据 */
{UINT8 s;mDelay0_5uS( );  /* 确保读写周期大于0.6uS */CH376T_CS_LOW;s  = Spi376InByte();mDelay0_5uS();return( s );
}/* 查询CH376中断(INT#低电平) */
UINT8   Query376Interrupt( void )
{
#ifdef  CH376_INT_WIREreturn( CH376_INT_WIRE ? FALSE : TRUE );  /* 如果连接了CH376的中断引脚则直接查询中断引脚 */
#elsereturn( CH376_SPI_SDO ? FALSE : TRUE );  /* 如果未连接CH376的中断引脚则查询兼做中断输出的SDO引脚状态 */
#endif
}

【CH376】关于CH376的一些使用总结相关推荐

  1. 【CH376】使用CH376控制U盘-读写文件

    该项目通过STM32芯片的IO口模拟SPI接口操作CH376芯片完成对U盘的读写操作. CH376芯片内置了文件管理系统,可以通过简洁的命令操作U盘,完成读写文件等各种常规的U盘操作,用户不需要考虑F ...

  2. CH376的串口模式操作U盘(读、写、txt文件、csv文件、串口调试讲解、stm32程序)

    文中介绍的可能有一些繁琐,因为也是想解释的更清楚一些,但是小弟希望大家能认真看完. 市面上关于ch376串口的知识介绍不多,可以说基本没有,博主当时也废了一些力气,在此希望给大家一些帮助,认真看完绝对 ...

  3. C语言以延时的状态读取数据文件,CH376 U盘文件读写相关C语言代码

    /* CH376芯片 硬件标准SPI串行连接的硬件抽象层 V1.0 */ /* 提供I/O接口子程序 */ #include        "HAL.H" /* 本例中的硬件连接方 ...

  4. 关于CH376拷贝U盘文件速度的测试比较

    测试目的,实验在使用CH376对U盘内文件进行拷贝,测试拷贝速度. 实验条件,STM32103VC(内部64KRAM,256Kflash),72Mhz,SPI 18Mhz,CH376,测试文件:MOD ...

  5. 移植 CH376 USB FAT12/16/32文件系统芯片 单片机 MCU51

    已经移植好的代码下载:http://download.csdn.net/detail/lxj_com2006/3793887 欢迎交流: QQ:67016879 EMAIL: lxj_com@163. ...

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

    引: 项目需求:将主机数据通过串口写到外部U盘中,主机只有一个串口可以使用,无法扩展别的接口.       项目周期:一周完成.       项目预算:20元以内 一.方案确定: 针对这个需求以及时间 ...

  7. USB(CH376)使用笔记-U盘的数据读写

    使用USB的数据导出功能,一种方式直接使用MCU的USB外设(且具有USB HOST)功能,MCU作为主机读取从机U盘:另一种方式,使用一个外置芯片,类似CH376这种(SPI接口或串口),芯片集成了 ...

  8. 【GD32F427开发板试用】硬件SPI通信驱动CH376芯片,用单片机实现U盘数据下载

    本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:周文杰 SPI通信作为单片机多种基础数据传输模式中的一种,驱动外部芯片CH376实现数据 ...

  9. CH376 SD卡走线 TF卡走线

    一图流,DI.DO比较绕,容易连错,想象实际PCB上芯片的引脚需要连到SD卡的Pin上,不要只纠结于原理图.

最新文章

  1. 共享文件迁移(fileserver)——从windows server 2003到windows server 2008
  2. 初识Tcl(十):Tcl 过程
  3. PriorBox 改进
  4. 人脸识别入侵生活,但“刷脸”背后你的信息安全吗?
  5. 文档型数据库mongodb介绍2-副本集
  6. 计算机网络流量图阅读与理解,计算机网络流量监控的设计与实现
  7. JVM——CPU缓存架构与Java 内存模型
  8. account表里有什么 银行_模拟一个银行账户类Account,账户类中包括所有者、账号、余额、账户总数、存款、取款等信息。_学小易找答案...
  9. 信息学奥赛一本通(2028:【例4.14】百钱买百鸡)
  10. 大话数据结构第四章栈的应用
  11. Exchange server 2010批量建用户及通讯地址簿更新
  12. Spring底层原理问题
  13. 各纬度气候分布图_高中地理丨各种气候类型分布图+气候问题全总结,再也不怕搞混了!...
  14. Java编程题修院子_2020大学moocJava程序设计题目答案
  15. 泰坦尼克号Python数据分析
  16. 微博2面:微信朋友圈是怎么实现的?
  17. c语言凑数的不同种方法,凑数强化版【庆贺2021年5月9日母亲节】
  18. office2020与2016版的不同_Office2016与Office2013有什么区别?Office2016评测
  19. 叶子结点和分支节点_结点数和叶子结点数有什么区别
  20. android 打开h5文件下载,微信h5页面下载app —— 安卓直接下载apk文件包,IOS跳转AppStore的实现代码...

热门文章

  1. 【转】linux下杀死进程(kill)的N种方法
  2. 微信小程序滚动Tab选项卡:左右滑动切换、触底加载分页
  3. Android手机开发总结——Android核心分析
  4. 目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
  5. 2.1.15 行首确保不是标点符号
  6. 码农场 » POJ 2566 Bound Found 题解 《挑战程序设计竞赛》
  7. 电磁场常见名词整理(不断更新中)
  8. 仿真软件ADS2015安装破解教程
  9. sqlserver Sum求和float类型 数据不准问题
  10. 面向对象三大特性及关键字