`
insertyou
  • 浏览: 933640 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

CH376-U盘读写模块(串口)使用笔记

 
阅读更多

最近做项目,需要把一些AD转换的数据存储在U盘上,四处寻访最终找到了CH376这个芯片。2009年12月终于在网上买到CH376模块。模块使用的是IC开发网设计的CH376模块,有兴趣的朋友可以去看看www.icdev.com.cn。价格不是很贵几十元钱。它用的CH376芯片是南京沁恒的(www.wch.cn)。

经过1个月的摸索,总算调试成功了。这点要感谢“沁恒”的工程师的支持。很多问题都是他们帮助调试成功的。

用7S64的串口驱动CH376模块,首先要对模块带的驱动文件进行修改。

(1)首先修改HAL.h 文件,屏蔽以下代码

/* CH376芯片 硬件抽象层 V1.0 */
/* 提供I/O接口子程序 */

//#include<reg52.h>
#include"CH376INC.H"

#ifndef__CH376_HAL_H__
#define __CH376_HAL_H__

//#ifdef __CX51__
//#ifndef __C51__
//#define __C51__1
//#endif
//#endif
//
//#ifdef __C51__
//#defineBIG_ENDIAN1
//#endif
//#ifdef __C51__
//#pragma NOAREGS
//#endif

(2)修改UART_HW.C串口驱动文件

#include "HAL.H"
#include "stdio.h"
#include "CH376INC.H"

#include "UART/Serial.h" 在这里加入AT91SAM7S64串口通信代码,后面会给出代码全文

voidCH376_PORT_INIT( void ) /* 由于使用异步串口读写时序,所以进行初始化 */
{
//*屏蔽这里所有的代码*/

}

修改CH376写命令、数据写入、数据读写命令

voidxWriteCH376Cmd( UINT8 mCmd ) /* 向CH376写命令 */
{
Uart0WriteData(SER_SYNC_CODE1);/* 启动操作的第1个串口同步码 */
Uart0WriteData(SER_SYNC_CODE2);/* 启动操作的第2个串口同步码 */
Uart0WriteData(mCmd); /* 串口输出 */

}

voidxWriteCH376Data( UINT8 mData ) /* 向CH376写数据 */
{
Uart0WriteData(mData);
}

UINT8xReadCH376Data( void ) /* 从CH376读数据 */
{

return(Uart0ReadData());
}

/* 查询CH376中断(INT#低电平) */
UINT8Query376Interrupt( void )
{
UINT8res;
xWriteCH376Cmd( CMD_GET_STATUS ); /* 测试单片机与CH376之间的通讯接口 */
res = xReadCH376Data( );
return(res);
}

UINT8mInitCH376Host( void ) /* 初始化CH376 */
{
UINT8res;
CH376_PORT_INIT( ); /* 接口硬件初始化 */
xWriteCH376Cmd( CMD11_CHECK_EXIST ); /* 测试单片机与CH376之间的通讯接口 */
xWriteCH376Data( 0x65 );
res = xReadCH376Data( );
if ( res != 0x9A )
{
printf("\nmInitCH376Host:USB MODULE CONNECTION FAILED\n");
return( ERR_USB_UNKNOWN );
}
else
{
printf("\nmInitCH376Host: USB MODULE CONNECTION SUCCESS\n");
return( USB_INT_SUCCESS );
}

}

修改完成后,就可以使用改模块了。

下面给出Serial.c Serial.h源程序供也在使用AT91SAM7S64的朋友一起参考交流。

/*******************************************************/

初始化串口0

void Init_UART0 (void) { /* Initialize Serial Interface */
*AT91C_PMC_PCER|=(1 << AT91C_ID_US0);
*AT91C_PIOA_PDR|= AT91C_PA5_RXD0| /* Enable RxD0 Pin */
AT91C_PA6_TXD0; /* Enalbe TxD0 Pin */

index0=0;
pUSART0->US_CR = AT91C_US_RSTRX | /* Reset Receiver */
AT91C_US_RSTTX | /* Reset Transmitter */
AT91C_US_RXDIS | /* Receiver Disable */
AT91C_US_TXDIS; /* Transmitter Disable */

pUSART0->US_MR = AT91C_US_USMODE_NORMAL | /* Normal Mode */
AT91C_US_CLKS_CLOCK | /* Clock = MCK */
AT91C_US_CHRL_8_BITS | /* 8-bit Data */
AT91C_US_PAR_NONE | /* No Parity */
AT91C_US_NBSTOP_1_BIT; /* 1 Stop Bit */

pUSART0->US_BRGR = BRD_USB; /* Baud Rate Divisor */

pUSART0->US_CR = AT91C_US_RXEN | /* Receiver Enable */
AT91C_US_TXEN; /* Transmitter Enable */


}

/******USB 模块通信用**********/
void Uart0WriteData (unsigned char data) { /* Write character to Serial Port */

while (!(pUSART0->US_CSR & AT91C_US_TXRDY)); /* Wait for Empty Tx Buffer */
pUSART0->US_THR = data;
}

unsigned char Uart0ReadData (void) { /* Read character from Serial Port */
while (!(pUSART0->US_CSR & AT91C_US_RXRDY)){ }
return (pUSART0->US_RHR); /* Read Character */
}

unsigned int Uart0_IsRxReady(void)
{
//return (AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_RXRDY);
return (pUSART0->US_CSR & AT91C_US_RXRDY);
}
/******USB 模块通信用**********/

整个CH376在AT91SAM7S64上的使用就到此为止。 目前使用下列感觉还可以。

呵呵。

分享到:
评论

相关推荐

    CH375_CH376_U盘模块

    在U盘模块中,CH375或CH376通常用于将微控制器与USB闪存驱动器连接,实现数据的读写功能。 在“CH375_CH376_U盘模块”这个主题中,测试程序是关键部分,它通常包括以下内容: 1. 驱动程序:驱动程序是连接操作系统...

    STM32F103V+CH376实现U盘、鼠标键盘操作.rar

    总之,这个项目展示了如何使用STM32F103V和CH376芯片实现对U盘、鼠标和键盘的控制,是学习嵌入式USB设备控制的一个典型实例。通过研究提供的源码,开发者可以掌握嵌入式系统中USB设备驱动的实现方法,并且可以将这些...

    stm32+ch376 UART.rar

    在实际应用中,STM32通过UART接口与CH376芯片连接,可以实现STM32控制设备的数据读写,例如读取U盘、SD卡等存储设备的数据,或者实现USB设备的通信功能。UART是一种简单的串行通信协议,通常包括TX(发送)和RX...

    CH376模块开发程序.rar

    CH376模块是一款常用的USB接口芯片,常用于嵌入式系统中,提供USB设备功能。这个"CH376模块开发程序.rar"文件很可能包含了与CH376芯片相关的固件、驱动程序、示例代码以及开发工具,用于帮助开发者在STM32ZE微控制器...

    基于CH375的USB数据传输

    - **内部结构丰富**:集成了PLL倍频器、数据缓冲区、主从USB接口SIE、被动并行接口、异步串行接口、命令解释器、控制传输的协议处理器以及通用固件程序等部件。 #### 三、系统硬件设计 ##### 3.1 USB芯片的选择与...

    LPC1768代码 原理图 PCB板芯片中英文资料

    在LPC1768系统中,CH395Q通过串行接口与MCU通信,实现对USB设备的操作。 **DP83848CV模块**: DP83848CV是德州仪器(TI)的一款以太网物理层收发器,符合IEEE 802.3标准。它提供RJ45接口,将LPC1768的以太网MAC信号...

    用STM32实现U盘

    "USB Mass Storage学习笔记-STM32+FLASH实现U盘.pdf"这个文件很可能包含了详细的步骤和示例代码,涵盖了如何初始化USB控制器、构建设备描述符、处理USB请求、实现数据传输以及与闪存的交互等内容。源程序文件则...

Global site tag (gtag.js) - Google Analytics