ch376操作SD卡问题

基于ch376的U盘我已经都调试通了 但是SD卡始终没有弄好 问题如下: s = CH376DiskMount( ); /* 初始化磁盘并测试磁盘是否就绪 */ s始终是130,即ERR_DISK_DISCON /* 检测到断开,重新检测并计时 */ 不知道为什么?

我的接线是: SD_CK ------------ SCLK SD_DO ------------ MOSI SD_DI ------------ MISO SD_CS直接接GND

SD卡座3.3V供电

我的SD卡是4G的

请问大神是什么问题?跪谢了、、、

我的接线是: SD_CK ------------ SCLK SD_DO ------------ MOSI SD_DI ------------ MISO SD_CS直接接GND 你这个接线是CH376和SD卡的接线?还是单片机和CH376接线?无论哪种接法SD_CS都不能接地。


我将SD_CS ------------ CS 但是 for ( i = 0; i < 100; i ++ ) { /* 最长等待时间,100*50mS */ usleep( 1000*50 ); printf( "Ready ?\n" ); s = CH376DiskMount( ); /* 初始化磁盘并测试磁盘是否就绪 */ printf("s=%d\n", s); if ( s == USB_INT_SUCCESS ) break; /* 准备好 */ else if ( s == ERR_DISK_DISCON ) break; /* 检测到断开,重新检测并计时 */ if ( CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED && i >= 5 ) break; /* 有的U盘总是返回未准备好,不过可以忽略,只要其建立连接MOUNTED且尝试5*50mS */ } 打印出的s如下: s=81 Ready ? s=20 我知道 20是对的 表示USB_INT_SUCCESS 但是后面读出的SD设备厂商 SD卡容量都是错的或者乱码 请问是怎么回事呢?


补充下: printf( "DiskQuery: " ); /* 检查U盘或者SD卡的剩余空间 */ s = CH376DiskQuery((PUINT32)buf); /* 查询磁盘剩余空间信息,扇区数 */ printf("s=%02x \n",(unsigned short)s ); printf( "free cap = %ld MB\n", *(PUINT32)buf / ( 1000000 / DEF_SECTOR_SIZE ) );

i = CH376ReadBlock( buf ); /* 如果需要,可以读取数据块CH376_CMD_DATA.DiskMountInq,返回长度 */ if ( i == sizeof( INQUIRY_DATA ) ) { /* U盘的厂商和产品信息 */ buf[ i ] = 0; printf( "UdiskInfo: %s\n", ((P_INQUIRY_DATA)buf) -> VendorIdStr ); }

打印结果: DiskQuery: s=1f free cap = 0 MB UdiskInfo: ."8�J!D$7


首先,三楼的第一个s应该是设置模式返回值吧。确保模式设置为3,之后应该是检测SD卡连接和CH376DiskMount。确保一次通过并且返回值为0x14。然后你先调用一下 i = CH376ReadBlock( buf ); /* 如果需要,可以读取数据块CH376_CMD_DATA.DiskMountInq,返回长度 */ if ( i == sizeof( INQUIRY_DATA ) ) { /* U盘的厂商和产品信息 */ buf[ i ] = 0; printf( "UdiskInfo: %s\n", ((P_INQUIRY_DATA)buf) -> VendorIdStr ); } 看一下i的值?


我测试了 i=36,不知还有哪里需要改吗?


是sd卡座坏了 换个卡座就好了


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