我用c8051F020单片机+CH375来读写U盘,我测了一下CH375的D0-D6的脚都正常,可是D7一直是0,晶振12Mhz,14脚为5V,13脚为2.6V,芯片初始化通不过初始化程序用 UINT8 mCH375Init( ) { UINT8 i; UINT8 c; CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试工作状态 */ CH375_WR_DAT_PORT( 0x55 ); /* 测试数据 */ c = CH375_RD_DAT_PORT( ); /* 返回数据应该是测试数据取反 */ if ( c != 0xaa ) { /* CH375出错 */ for ( i = 100; i != 0; i -- ) { /* 强制数据同步 */ CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* CH375执行硬件复位 */ c = CH375_RD_DAT_PORT( ); /* 延时 */ } mDelay100mS( ); /* 延时至少30mS */ } CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); /* 设置USB工作模式 */ CH375_WR_DAT_PORT( 6 ); /* 模式代码,自动检测USB设备连接 */ for ( i = 0xff; i != 0; i -- ) /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; /* 操作成功 */ if ( i != 0 ) return( 0 ); /* 操作成功 */ else return( 0xff ); /* CH375出错,例如芯片型号错或者处于串口方式或者不支持 */ } 请好心人帮帮我吧!急!谢谢先!
你的CMD_CHECK_EXIST命令写的数据是0x55,那你看下返回的数据是多少啊?正常的应该是0XAA,你的XI2.6V应该是正常的
返回数据要怎么看啊?我只知道我用个指示灯,再把程序变成如下 CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试工作状态 */ CH375_WR_DAT_PORT( 0x55 ); /* 测试数据 */ c = CH375_RD_DAT_PORT( ); /* 返回数据应该是测试数据取反 */ if ( c != 0xaa ) { /* CH375出错 */ for ( i = 100; i != 0; i -- ) { /* 强制数据同步 */ CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* CH375执行硬件复位 */ c = CH375_RD_DAT_PORT( ); /* 延时 */ } mDelay100mS( ); /* 延时至少30mS */ } else LED_OUT_ACT( ); 灯一直没亮。我用的是C8051020仿真器,用Silicon Laboratories IDE V1.9软件。一直不知道左面看返回数据……请告诉我,谢谢!!!
你那上面带串口调试吗? 有的话直接在c = CH375_RD_DAT_PORT( );后面加上printf("%02x ",(unsigned int)c); 直接,看返回的数据
好像没有带串口调试的,不知道可不可以用单独一个串口调试工具呢?该怎么编程呢?谢谢!!!
晶振肯定没起振,,正常情况下晶振引脚应该是2V左右,所以先排除你的硬件故障在查程序吧
我再测了下晶振14脚为2.3v,13脚为2v,估计是刚才改动了一些程序,这算不算起振了呢? 还有串口我看SCON0的数据是52,真不知道错哪里了……谢谢!!!
假如D7一直为低那麽测试命令+55应该返回2A才对,你检查一下是不是你的CPU将该引脚的电平控制住了.振荡没问题
这样应该是起振了,如果不放心的话用示波器看看 你的子程序应该没问题的,最好用串口工具看一下到底返回了什么数据,如果返回的数据有共性,那么问题就比较好解决了
我就是用示波器测的了。 现在波特率的设置也有问题了,我用的这仿真器只提供38400,57600,115200三种,而这块芯片则是为9600, 该怎么办啊?选哪个好?谢谢各位了!!!
按照手册CH375的波特率可以修改的
你用的是模块还是用了我们的375的芯片?
把CHECKEXIT返回的值从串口输出,用ACCESSPORT抓下来,常用的波特率都支持的