各位大虾: 小弟刚用CH375,测试命令正确,返回数据是输入数据取反。可用SET_USB_MODE命令时返回的还是测试时返回的数据。不知为什么? (我的程序是先用测试命令,再用模式设置命令)
你写的测试命令的输入数据是什么??假如你输入的是0X55,那么返回的是0XAA,那你在用CHECK_EXIST命令输入0XAA,看返回的是什么数据,如果返回的是0X55的话则说明硬件是没有问题的,那么SET_MODE命令就是可以成功的,成功返回的数据应该是0X51.
我只测试了输入数据0XAA,返回0X55
那你在测下输入55,看返回的是0XAA吗?
刚测试完,测试命令正确,无论输入什么数据都正常,就是模式设置命令返回既不是51H,也不是5FH
你多次测试之后在设置模式,返回的数据是什么啊??还有就是你用的什么单片机,你用的是总线口方式还是模拟口方式?
总线方式,我用MEGA16L的MCU,返回的数据始终是测试阶段应该返回的数据,我以为是延时不够,可加大延时后依然如此。(模式设置时等待20US返回数据)
那你换个375试下看看还是不是这个问题
这可能有点麻烦,能测试通过不是说明芯片没问题吗?我的模式设置子程序如下 /*================================================================================== 函数功能:设置USB工作模式 输入数据:模式代码 输出数据:操作状态 ===================================================================================*/ uchar Set_Usb_Mode(uchar mode) { uchar data; delay_us(2); PARA_send_com(SET_USB_MODE); //设置工作模式命令 delay_us(10); PARA_send_data(mode); //送出模式代码 delay_us(40); data = PARA_read_data(); return(data); //返回工作操作状态 }
你可以不可以将读写数据和写命令的子程序贴出来.
void PARA_send_com(uchar com) { PARA_RD = 1; //读无效 PARA_A0 = 1; //写命令 PARA_WR = 0; //写有效 delay_us(2); OUT_data_com_port = com; //送出命令 delay_us(7); PARA_WR = 1; }
/*============================================================================== 函数功能:输出数据 输入参数:待输出数据 输出参数:无 函数说明:适用于并口 =============================================================================*/ void PARA_send_data(uchar data) {
PARA_RD = 1; //读无效 PARA_A0 = 0; //写数据 PARA_WR = 0; //写有效 delay_us(2); OUT_data_com_port = data; //送出数据 delay_us(7); PARA_WR = 1; }
/*=========================================================================== 函数功能:读入数据 输入参数:无 输出参数:读入数据 函数说明:适用于并口 ==========================================================================*/ uchar PARA_read_data(void) { uchar data; //定义输入数据缓冲区 DDRA = 0x00; PARA_WR = 1; //写无效 PARA_A0 = 0; //读数据 PARA_RD = 0; //读有效 delay_us(1); data = IN_data_port; //读入数据 delay_us(7); PARA_RD = 1; return(data); //返回读入数据 }
你用下这个程序看下可以不可以: uchar Set_Usb_Mode(uchar mode) { uchar data; delay_us(2); PARA_send_com(CMD_SET_USB_MODE); //设置工作模式命令 ,这个个命令代码是0X15,你上面的是SET_USB_MODE,你将它定义为命令码0X15了没? delay_us(10); PARA_send_data(mode); //送出模式代码 delay_us(40); data = PARA_read_data(); return(data); //返回工作操作状态 }
我也遇到这样的问题,楼上的怎么解决的
这跟我的程序一样呀
还未解决
void PARA_send_com(uchar com) { OUT_data_com_port = com; //送出命令 PARA_A0 = 1; //写命令 PARA_RD = 1; //读无效 PARA_WR = 0; //写有效 delay_us(1); PARA_WR = 1; }
/*============================================================================== 函数功能:输出数据 输入参数:待输出数据 输出参数:无 函数说明:适用于并口 =============================================================================*/ void PARA_send_data(uchar data) { OUT_data_com_port = data; //送出数据 PARA_A0 = 0; //写数据 PARA_RD = 1; //读无效 PARA_WR = 0; //写有效 delay_us(1); PARA_WR = 1; }
/*=========================================================================== 函数功能:读入数据 输入参数:无 输出参数:读入数据 函数说明:适用于并口 ==========================================================================*/ uchar PARA_read_data(void) { uchar data; //定义输入数据缓冲区 DDRA = 0x00; PARA_A0 = 0; //读数据 PARA_WR = 1; //写无效 PARA_RD = 0; //读有效 data = IN_data_port; //读入数据 PARA_RD = 1; return(data); //返回读入数据 }
你将这个程序在加上我上面的程序放在一起试下看下可以不??