测试ch372是否正常工作的问题

如题:在测试ch372是否正常工作时,读出来的数据和写进去的数值是一样的,比如写0x55,读出来的也是0x55;写进去0xaa,读出来的也是0xaa;计算机也可以识别ch372,单片机端口和ch372经测试连接也是好的,真的不知道是什么原因?有人可以帮忙吗?谢谢了,将程序附上: #define CH372_A0_H PORTC|=(1<<1) #define CH372_A0_L PORTC&=~(1<<1) #define CH372_CS_H PORTC|=(1<<3) #define CH372_CS_L PORTC&=~(1<<3) #define CH372_INT_H PORTC|=(1<<0) #define CH372_INT_L PORTC&=~(1<<0) #define CH372_WR_H PORTG|=(1<<0) #define CH372_WR_L PORTG&=~(1<<0) #define CH372_RD_H PORTG|=(1<<1) #define CH372_RD_L PORTG&=~(1<<1) void CH372_PORT_INT() { DDRC|=(1<<1)|(1<<3);//A0,CS设置为输出方向 DDRG|=(1<<0)|(1<<1);//WR,RD设置为输出方向 CH372_CS_L; CH372_WR_H; CH372_RD_H ; CH372_A0_L; DDRA=0x00; PORTA=0xff; } void writech372cmd(unsigned char cmd) { ch372_delay_us();ch372_delay_us(); DDRA = 0xFF; PORTA=cmd; CH372_A0_H; CH372_CS_L;CH372_WR_L; CH372_CS_L;CH372_WR_H; CH372_CS_H; CH372_A0_L; DDRA=0x00; ch372_delay_us();ch372_delay_us(); } void writech372data(unsigned char data) { ch372_delay_us();ch372_delay_us(); DDRA = 0xFF; PORTA=data; CH372_A0_L;CH372_CS_L;CH372_WR_L; CH372_CS_L; CH372_WR_H ; CH372_CS_H; CH372_A0_H; DDRA=0x00; ch372_delay_us();ch372_delay_us(); } unsigned char readch372data(void) { unsigned char data; ch372_delay_us();ch372_delay_us(); DDRA=0x00; CH372_A0_L; CH372_CS_L; CH372_RD_L; CH372_WR_H ; CH372_CS_L; data=PORTA; CH372_RD_H;CH372_CS_H;CH372_A0_H; ch372_delay_us();ch372_delay_us(); return (data); }

void main() { unsigned char i; CH372_PORT_INT(); led_DDR; led_off; /*--------------------测试CH375是否正常工作,可选操作,通常不需要----------- */

writech372cmd(CMD_CHECK_EXIST); //测试CH372/CH375是否正常工作 writech372data(0x55); //写入测试数据 i = ~ 0xaa; //返回数据应该是测试数据取反,即0xaa if (readch372data()!=0x55) // CH372/CH375不正常 { led_on; for ( i=80; i!=0; i-- ) { writech372cmd(CMD_RESET_ALL);//多次重复发命令,执行硬件复位 readch372data(); } writech372cmd(0); delay_nms(50); }

/*------------------------设置USB工作模式, 必要操作----------------------*/

writech372cmd(CMD_SET_USB_MODE);// 设置USB工作模式 writech372data(2); // 设置为使用内置固件的USB设备方式 for ( i=100; i!=0; i-- ) // 等待操作成功,通常需要等待10uS-20uS { if(readch372data()==CMD_RET_SUCCESS) break; } while(1); }

补充一下,我用的单片机是atmega128;


一般来说,如果测试没有成功,那基本上是硬件的原因。你去查一下你的硬件连线是否和你在软件中定义的是否一致。


计算机可以识别372,驱动可以安装吗?可不可以正常通信? 若可以说明的硬件没有问题. 测试命令改为: writech372cmd(CMD_CHECK_EXIST); //测试CH372/CH375是否正常工作 writech372data(0x55); //写入测试数据 i = ~ 0x55; //返回数据应该是测试数据取反,即0xaa while(readch372data()!=i) // CH372/CH375不正常 { led_on; for ( i=80; i!=0; i-- ) { writech372cmd(CMD_RESET_ALL);//多次重复发命令,执行硬件复位 readch372data(); } //writech372cmd(0); delay_nms(50); }


提示找到新硬件了,而且是自动安装驱动的,还有在usb设备ch372调试工具软件的设备状态是:检测到有ch372设备已插入,而且厂商ID和设备ID都有。设备可以打开关闭,具体的和计算机通信还没有调试。


这说明已经通讯成功了.测试命令理解错误


请问我测试ch372是否正常工作时 如果发55 返回的是aa .. 但是电脑显示不出来发现新硬件 怎么回事啊... 郁闷....


测试命令只是测试硬件是否正常工作的,做完后设置模式,不知道你设置模式有没有成功,设置模式几?


"测试命令理解错误",那这样的话我可以继续做通讯吗?还是要解决这个问题再做下面的,要是解决,怎样解决这个测试命令理解错误呢?


解决了,是软件的问题,谢谢大家了


请问在labview中,是否可以使用中断方式读取数据。我使用的是CH372芯片,网页上提供的lv例子中中断调用总是不正常。


labusb 你好: 我也是一个初次使用者,很想和你学习一下,你是怎样成功测试CH372经验的,可以帮助一下吗. 联系方式:QQ群号:65495167


unsigned char readch372data(void) { unsigned char data; ch372_delay_us();ch372_delay_us(); DDRA=0x00; CH372_A0_L; CH372_CS_L; CH372_RD_L; CH372_WR_H CH372_CS_L; data=PORTA; CH372_RD_H;CH372_CS_H;CH372_A0_H; ch372_delay_us();ch372_delay_us(); return (data); }

中间的data=PORTA是不是应该换成data = PINA


对于像AVR一类双向端口的单片机: 读端口应该是:data = PINA


unsigned char readch372data(void) { unsigned char data; ch372_delay_us();ch372_delay_us(); DDRA=0x00; CH372_A0_L; CH372_WR_H CH372_CS_L; CH372_RD_L; CH372_CS_L; data=PINA; CH372_RD_H;CH372_CS_H;CH372_A0_L; ch372_delay_us();ch372_delay_us(); return (data); }


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