[求助]CH375初始化失败

我用串口方式,USB主机模式,做块板子。实现单片机读取U盘数据。可我在程序初始化CH375事失败了。我用示波器测量发现,CH375的晶振正常,工作电压也正常,可是我把程序烧进去的时候,在程序中初始化CH375芯片(想必同时也对CH375进行复位吧),可是我用示波器测试其INT#管脚,却没有出现过低电平。正常情况下,不是初始化CH375芯片的情况下会出现INT#输出低电平的吗?我的CH375到底怎么了?

以下是我的简单测试CH375识别U盘程序: main() { UINT8 i; PORTA = 0x00;//单片机A端口初始化 DDRA = 0xFF; PORTC = 0xFF;//单片机C端口初始化 DDRC = 0xFF; init_lcd(); init_lcd(); mInitSTDIO( ); LCD_write_string(0,0,"Start" ); mDelaymS( 100 ); mDelaymS( 100 ); mDelaymS( 100 ); mDelaymS( 100 ); i = CH375LibInit( ); /* 初始化CH375程序库和CH375芯片,操作成功返回0 */ mStopIfError( i ); /* 其它电路初始化 */ xWriteCH375Cmd( 0x06 ); /* 测试CH375是否正常工作 */ xWriteCH375Data( 0x55 ); /* 写入测试数据 */ i = ~ 0x55; /* 返回数据应该是测试数据取反 */ if ( xReadCH375Data( ) != i ) { /* CH375不正常 */ LCD_write_string(0,0,"wrong" ); for ( i=80; i!=0; i-- ) { xWriteCH375Cmd( 0x05 ); /* 多次重复发命令,执行硬件复位 */ } } else LCD_write_string(0,0,"right" ); }

(1)失败了,返回值是多少呢? (2)“不是初始化CH375芯片的情况下会出现INT#输出低电平的吗”,我们手册中从来没这么说过,不知道你是从哪儿看到的!!


返回的值是“tart”,我的错误停机程序是:

void mStopIfError( UINT8 iError ) { unsigned char *k; k=&iError; if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ LCD_write_string(0,0,k); /* 显示错误 */ mDelaymS( 100 ); mDelaymS( 100 ); mDelaymS( 100 ); mDelaymS( 100 ); } (2)我是在CH37说明书里的管脚说明里看到的,里面说:在复位完成后为中断请求输出,低电平有效。


做了下测试命令,测试命令返回值不正确。会是什么问题?


返回值是多少?你用什么数据测试的?这个问题很多,比如硬件连接不正确,读写时序不正确.你循环发送数据看看各引脚是不是正确.


(1)检查硬件连接有没有错误. (2)检查串口配置是否出错.串口通讯默认情况下为波特率9600,9位串口,发送命令第9为为1,数据为0.


我认真看过了,电路图完全按照贵公司给的串口方式连接,晶振工作正常,VCC,GND都正常,可是为什么初始化不成功?而且停机错误返回的值居然是“tart”,是之前“Start”的后面几个字符,而不是库里面的错误代码。

M16串口波特率设置如下: UBRRH = 0; UBRRL = 47; /* 9600bps@7.3728MHz */ UCSRB = 0x1C; /* BIT(RXEN) | BIT(TXEN);|BIT(UCSZ2) */ UCSRC = 0x86; /* BIT(UCSZ1) | BIT(UCSZ0); 9个数据位*/

读写函数如下:

void xWriteCH375Cmd( UINT8 mCmd ) { UCSRA|=0x41;//TXCIE=1;TXB8=1; //TXCIE = 1,发送时使能中断TXB8 = 1, 1表示地址,0 表示数据 UCSRB|=0x40;//TXC=1; 发送数据开始 UDR = mCmd; //发送缓冲器 while (UCSRB&0x0BF==0X40); delay2us( ); delay2us( ); }

void xWriteCH375Data( UINT8 mData ) { UCSRA|=0x40;//TXCIE = 1,发送时使能中断TXB8 = 0, 1表示地址,0 表示数据 ; UCSRB|=0x40; //TXC=1 发送数据开始 UDR = mData; while (UCSRB&0x40==0x40); delay2us( ); }

UINT8 xReadCH375Data( void ) { delay2us(); UCSRA|=0x80;//RXCIE = 1,发送时使能中断RXB8=0, 1表示地址,0 表示数据; UCSRB|=0x80;//接收数据开始 RXC=1 while (UCSRB&0x80==0x80); return(UDR); }

哎,到现在我实在是搞不懂错误在哪里?


你本身和我们芯片串口连接之后还可以通过串口发送数据?这种方式是一定不允许的.把所有的串口输出全部去掉.


您可以再说得详细点吗?我不是很明白。


你使用的是串口方式来与CH375通讯,就不能再使用该串口来监视程序,否则会造成数据干扰导致CH375误操作的,换一种监视方式.


你使用的是串口方式来与CH375通讯,就不能再使用该串口来监视程序,否则会造成数据干扰导致CH375误操作的,换一种监视方式.


那还能用什么监视程序?


用LED指示操作成功还是失败


解决了吗?我也是同样的问题,内置模式可以初始化,外置就报无法识别的USB


内置模式可以初始化则表示硬件连接和接口程序基本是没问题的,外置固件无法识别,是因为描述符信息没有成功传给PC,仔细检查枚举部分的程序。 另,下载CH372EVT.ZIP,参考\CH372EVT\PUB\XFIRM,这是外置固件例程


我没做到什么指示灯,我只用LED1602来监视程序进度。我看了CH375LIB\MCS51\FILELIB5\EXAM7里的串口程序,里面监视程序也用到串口的寄存器TI,怎么解析呢?为什么说用串口方式与CH375通讯就不能用串口来监视程序呢?难道我板子是串口方式,却用并口的监视程序吗?


只有登录才能回复,可以选择微信账号登录