求助(CH376实现SD卡文件管理)

目前情况如下: 用的是CH376评估版,本实验采用PIC24FJ128GA010单片机,用模拟并口的方式与CH376硬件链接,调试时,只链接了D0-D7、A0、RD#、WR#、CS#以及GND,RST、INT没连悬空, 测试单片机与CH376连接时一直通不过, xWriteCH376Cmd( CMD11_CHECK_EXIST ); /* 测试单片机与CH376之间的通讯接口 */ xWriteCH376Data( 0x65 ); res = xReadCH376Data( ); 程序运行到这里返回值还是 0x65, CH376是晶振起振了的。 还有就是例程里 void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376写命令 */ { CH376_DATA_DAT_OUT( mCmd ); /* 向CH376的并口输出数据 */ CH376_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ CH376_A0 = 1; CH376_CS = 0; CH376_WR = 0; /* 输出有效写控制信号, 写CH376芯片的命令端口 */ // CH376_CS = 0; /* 该操作无意义,仅作延时,CH376要求读写脉冲宽度大于40nS */ CH376_WR = 1; /* 输出无效的控制信号, 完成操作CH376芯片 */ CH376_CS = 1; CH376_A0 = 0; CH376_DATA_DIR_IN( ); /* 禁止数据输出 */ mDelay0_5uS( ); mDelay0_5uS( ); mDelay0_5uS( ); /* 延时1.5uS确保读写周期大于1.5uS,或者用状态查询代替 */ }里面的 CH376_DATA_DAT_OUT( mCmd ); /* 向CH376的并口输出数据 */ CH376_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ 时序是不是有问题? 应该先将方向设为输出,再输出数据吧?为何如此?

把写函数的写信号修改下,把延时加长点,先输出数据在设置方向没问题的,只要你单片机可以把这个数据输出来就没问题 void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376写命令 */ { CH376_DATA_DAT_OUT( mCmd ); /* 向CH376的并口输出数据 */ CH376_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ CH376_A0 = 1; CH376_CS = 0; CH376_WR = 0; /* 输出有效写控制信号, 写CH376芯片的命令端口 */ CH376_WR = 0; /* 输出有效写控制信号, 写CH376芯片的命令端口 */ CH376_WR = 0; /* 输出有效写控制信号, 写CH376芯片的命令端口 */ CH376_WR = 1; /* 输出无效的控制信号, 完成操作CH376芯片 */ CH376_CS = 1; CH376_A0 = 0; CH376_DATA_DIR_IN( ); /* 禁止数据输出 */ mDelay0_5uS( ); mDelay0_5uS( ); mDelay0_5uS( ); /* 延时1.5uS确保读写周期大于1.5uS,或者用状态查询代替 */ }


不是这里的问题,我采用的晶振是8Mhz 时序上都修改过,能够满足要求, 1、 CH376 INT一直为高,RST一直为低的状态,且晶振已经起振,是否这样情况可以确定CH376这边是没有问题的? 2、 单片机这边连接CH376D0-D7的口还并连了一LCD的数据线。目前是将CH376的片选直接接GND,单片机的数据输出是正常的,而读不到CH376上的数据, 输出0x65,读到的还是0x65。 是硬件上的原因吗?


1.说明CH376是正常工作的。 2.CH376和LCD共用数据线,那么在同一时刻只能对一个器件进行操作 3.单片机的端口配置是否正确?


#define CH376_DATA_DAT_OUT( d ) { CH376_DB0_DB7 = d; } /* 向并口输出数据 */ #define CH376_DATA_DAT_IN( ) ( CH376_DB0_DB7 ) /* 从并口输入数据 */ #define CH376_DATA_DIR_OUT( ) {CH376_DB0_DB7_TRIS = 0x00;} /* 设置并口方向为输出 */ #define CH376_DATA_DIR_IN( ) { CH376_DB0_DB7_TRIS = 0xFF; } /* 设置并口方向为输入 */

#define CH376_INT_WIRE INT0 /* 假定CH376的INT#引脚,如果未连接那么也可以通过查询状态端口实现 */

void CH376_PORT_INIT( void ) /* 由于使用通用I/O模拟并口读写时序,所以进行初始化 */ { CH376_WR_TRIS = 0; //将端口方向配置为输出 CH376_RD_TRIS = 0; //将端口方向配置为输出 CH376_A0_TRIS = 0;//将端口方向配置为输出 CH376_CS_TRIS = 0; //将端口方向配置为输出 // CH376_RESET_TRIS = 0; CH376_DATA_DIR_IN( ); } 这是端口方向配置,应该是这样配置吧。。 目前将LCD的供电断开,且控制程序屏蔽,结果还是一样没有连接上CH376, 还有就是CH376与单片机的连接线一共可能有20CM,可能是因为这个的原因吗?


CH376的RST引脚对电源接一个104的电容,读的数据怎么会和输入数据一样呢,好像读的不是单片机引脚上的状态。


我换用 SPI模式测试了一下, 还是不行,返回值是0XFF。 对了 你提醒了我,我确实是读的锁存器的值,而不是引脚状态,我再去修改一下测试。


说明一下,找到原因了,是因为自己端口配置的问题,PIC里端口数据应该读PORT值,而不是读LAT值,我这里搞错了,所以才会出现上面的问题, 感谢 _study_ { M }, hcn { M } 两位的配合以及帮助。


需要实现功能如下: 将采集数据通过USB接口芯片CH376传送给PC机,相关例程和资料有吗?


CH376做设备,与CH372完全兼容,资料和例程参考CH372 参考资料:CH372DS1.PDF,CH372EVT.ZIP


单片机有办法知道 CH376 是否链接上了 PC机,如何实现?


我这个用的是SPI模式,,发送的是 0X06号命令进行测试,结果返回 的全是0xff


说明SPI时序有问题或者硬件问题。 查看25脚是否为低电平。 检查是否在SPI模式下。 SPI模式是否符合?频率是否在CH376的范围之内?


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