首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么通过SPI向我的10类标清发送CMD58返回0x01而不是0x00?

首先,为了回答这个问题,需要了解一些背景知识。

SPI(Serial Peripheral Interface)是一种用于串行通信的接口标准,它可以实现与外部设备的高速数据传输。SPI接口通常由主设备(如微处理器)和从设备(如传感器、存储器等)组成,通过时钟和数据线进行通信。

CMD58是SPI的一条指令,它用于读取存储设备(如SD卡)的OCR(Operating Conditions Register)寄存器,该寄存器存储了存储设备的工作电压范围等信息。

0x01和0x00是CMD58的返回值,它们表示不同的含义。通常情况下,如果CMD58返回0x00,表示存储设备的OCR寄存器读取成功;而如果返回0x01,则表示存储设备的OCR寄存器读取失败或出现错误。

那么,为什么通过SPI向你的10类标清发送CMD58返回0x01而不是0x00呢?这个问题的答案可能有多个方面的原因。以下是一些可能的解释:

  1. 存储设备故障:CMD58返回0x01可能意味着存储设备本身出现故障或错误。可能存在硬件损坏、不正确的连接、电源供应问题等原因导致存储设备无法正确响应CMD58指令。
  2. 兼容性问题:存储设备和主设备之间的兼容性问题可能导致CMD58返回0x01。不同厂商的存储设备可能具有不同的SPI通信协议或数据格式,如果存储设备不完全符合SPI规范或主设备不正确地解析存储设备的响应,就会导致CMD58返回错误的值。
  3. 软件配置问题:CMD58返回0x01也可能是由于软件配置错误引起的。例如,主设备在发送CMD58指令时未正确配置SPI时钟频率、数据格式等参数,或者在解析存储设备响应时出现了错误。

针对这个问题,如果要确定具体原因,可以尝试以下步骤:

  1. 检查硬件连接:确保存储设备正确连接到主设备的SPI接口,并且供电正常。检查电源线、时钟线、数据线等连接是否正确可靠。
  2. 验证存储设备的正常工作:使用其他SPI设备或工具验证存储设备是否正常工作。例如,尝试使用其他SPI设备进行通信测试,或者使用专业的SPI调试工具检测存储设备的响应。
  3. 检查主设备的SPI配置:确认主设备的SPI配置参数是否正确。包括时钟频率、数据格式、传输模式等。查看主设备的相关文档或资料,确保SPI配置与存储设备的要求一致。
  4. 调试软件程序:检查主设备的软件程序,确保CMD58指令的发送和响应解析逻辑正确。可以使用调试工具、日志记录等方式定位问题所在。

当然,上述只是一些可能的原因和解决方法,具体情况需要结合实际环境和设备进行分析。如果你能提供更多细节和背景信息,可能可以帮助更准确地找到问题所在。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

STM32开发_利用SPI协议读写SD卡、介绍SD卡SPI时序

SPI方式采用4线制,使用CS、CLK、DataIn、DataOut进行数据通信。 SD方式时数据传输速度与SPI方式要快,采用单片机对SD卡进行读写时一般都采用SPI模式。...SD卡默认操作扇区大小是512字节。扇区大小,可以通过指令设置。就算不是512,也可以通过指令设置成512,因为这个值不太大,占用内存不太多,适合单片机使用。...0x00 #define SDCard_CMD55 55 //命令55,应返回0x01 #define SDCard_CMD58 58 //命令58,读OCR信息 三、向SD卡发送命令步骤介绍(SendSDCardCmd...卡才具有的命令CMD8,然后检测返回值: 返回值若是0x01,则表示此卡为V2.0卡,然后再发送循环命令CMD55+CMD41,直到返回0x00,确定SD2.0卡初始化成功; 然后再发送CMD58命令,...(先发CMD55,再发CMD41) 6. 2.0卡初始化成功后,再发送CMD58命令,继续判断是否是高速卡。 说明: CMD58命令返回值等于0,表示执行成功。

5.1K40

stc12c5a60s2功能说明(STC12C5A60S2默认触发)

不论你是什么卡,第一步工作都是相同,这个时候可以观察一下SD卡从D_OUT线上返回值,如果是0x01,说明CMD0操作是成功,此时SD卡还处在IDLE状态。...第三步操作即首先发送CMD55命令,接收到正常返回0X01后接着发送ACMD41,完成卡从IDLE状态到读写状态初始化进程。...如果操作正常,SD卡退出IDLE状态,最后返回值为0X00,此外任何其他返回值都是不正常。...发送CMD58命令后,SD卡下一组返回值为R1返回值+OCR寄存器内容。根据datasheet我们可以得到很多信息,上面已经提到,具体位置手册上很明白。...判断正常方法,CMD58返回值类型为R3 ,即R1类型+OCR寄存器内容,如果一切就绪,那么OCR最高四位为1100。

70810

SDMMC卡初始化及读写流程

SD卡发送复位命令CMD0后,要发送版本查询命令CMD8,返回状态一般分两种,若返回0x01表示此SD卡接受CMD8,也就是说此SD卡支持版本2;若返回0x05则表示此SD卡支持版本1。...在SPI模式下,CRC校验是被忽略,但依然要求主从机发送CRC码,只是数值可以是任意值,一般主机CRC码通常设为0x00或0xFF。...(3)发送CMD0,需要返回0x01,进入Idle状态 (4)为了区别SD卡是2.0还是1.0,或是MMC卡,这里根据协议向上兼容原理,首先发送只有SD2.0才有的命令CMD8,如果CMD8...返回无错误,则初步判断为2.0卡,进一步发送命令循环发送CMD55+ACMD41,直到返回0x00,确定SD2.0卡初始化成功,进入Ready状态,再发送CMD58命令来判断是HCSD还是SCSD,到此...我们在读写前面可以最好 读取下状态CMD13来检查状态位,判断上一次命令是否传输完了 2、读步骤: (1) 发送CMD17(单块)或CMD18(多块)读命令,返回0x00

2.2K20

RC522(RFID模块)实践总结

GPIOF->BSRR=0X01) #define CLR_SPI_CS (GPIOF->BRR=0X01) #define SET_RC522RST GPIOF->BSRR=0X02 #define...100%ASK } /* 函数名:SPI_RC522_SendByte * 描述 :向RC522发送1 Byte 数据 * 输入 :byte,要发送数据 * 返回 : RC522返回数据 * 调用...* 输入 :ucReg,寄存器地址 * ucMask,位值 * 返回 : 无 * 调用 :内部调用 */ void ClearBitMask ( u8 ucReg, u8 ucMask ) {...RC522和ISO14443卡通讯 * 输入 :ucCommand,RC522命令字 * pInData,通过RC522发送到卡片数据 * ucInLenByte,发送数据字节长度 * pOutData...传输速率设置问题:SPI口例程中预分频默认为4,RC522中SPI最高速率为10MHz/S,计算可知,预分频指数至少为8,所以适当升高预分频数,据反馈,预分频为8也容易出错,所以建议32或者64甚至为

2.2K20

STM32F103ZET–RFID-RC522使用例程(战舰版)

希望再有人加我QQ是跟我聊技术,不是:“大神,能发个工程给我吗?” main.c #include "rc522.h" int main() { ......_SendByte * 描述 :向RC522发送1 Byte 数据 * 输入 :byte,要发送数据 * 返回 : RC522返回数据 * 调用 :内部调用 */ void SPI_RC522_SendByte..._ReadByte * 描述 :从RC522发送1 Byte 数据 * 输入 :无 * 返回 : RC522返回数据 * 调用 :内部调用 */ u8 SPI_RC522_ReadByte ( void...RC522和ISO14443卡通讯 * 输入 :ucCommand,RC522命令字 * pInData,通过RC522发送到卡片数据 * ucInLenByte,发送数据字节长度 * pOutData...() SPIWriteByte(0) u8 SPIWriteByte(u8 byte); void SPI1_Init(void); #define SET_SPI_CS (GPIOF->BSRR=0X01

47410

瀚海微SD NAND之SD 协议(36)SPI模式

接口是在上电后第一个reset (CMD0)命令中选择,设备上电后不能更改。SPI标准只定义了物理链路,不是完整数据传输协议。SDl存储卡SPI实现使用SD存储卡协议和命令集一个子集。...与SD存储卡协议类似,SPI消息由命令、响应和数据锁令牌组成。主机和卡之间所有通信都由主机(master)控制。主机通过断言CS信号低来启动每个总线事务。与SD模式相反,所选卡总是响应命令。...当卡在读取操作中遇到数据检索问题时,它将响应一个错误响应(替换预期数据块),不是像SD模式那样响应一个超时。此外,在写操作期间发送到卡每个数据块都将使用数据响应令牌进行响应。...如果需要SPl模式,则该卡将切换到SPI并以SPI模式R1响应响应。返回SD模式唯一方法是进入电源循环。在SPl模式下,不观察SD模式下SD Cardl协议状态机。...CMD8参数格式与SD模式下定义格式相同。卡通过分析CMD8参数来检测运行状态有效性,主机通过分析CMD8响应来检测运行状态有效性。供电电压由参数中VHS字段表示。

11610

基于STM32RC522模块读写数据块以及电子钱包充值扣款系统设计

在我实验里面,我把选卡操作加了一个if条件,检查到是我定义的卡号时候才执行后面的三轮认证以及操作卡过程,不是我的卡则串口打印此卡没有认证。...数据 * 输入 :byte,要发送数据 * 返回 : RC522返回数据 * 调用 :内部调用 */ void SPI_RC522_SendByte ( u8 byte ) { u8 counter..._ReadByte * 描述 :从RC522发送1 Byte 数据 * 输入 :无 * 返回 : RC522返回数据 * 调用 :内部调用 */ u8 SPI_RC522_ReadByte (...RC522和ISO14443卡通讯 * 输入 :ucCommand,RC522命令字 * pInData,通过RC522发送到卡片数据 * ucInLenByte,发送数据字节长度...#define SET_SPI_CS (GPIOF->BSRR=0X01) #define CLR_SPI_CS (GPIOF->BRR=0X01) #define SET_RC522RST GPIOF

1.6K40

HAL库控制PS2手柄「建议收藏」

SPI通信协议 提一下,方便理解代码 这个已经被破解很久了,具体时序就这样。PS2手柄开启,接收器正常工作并接受以后,数据可以通过spi通信来发送接受,然后就可以通过单片机来完成数据接收和发送。...首先用单片机给PS2发送一个0x01,然后PS2会给你返回一个ID(说明此时是绿灯mode还是红灯mode),单片机再给他发送一个0x42(请求接受数据),PS2返回0x5a(表示可以开始传输数据),剩下就是接受他摇杆和按键数据了...主程序非常简单,就是上面说先拉低CS脚,发送一个0x01,等10us,然后发送0x42,并且接收data[1],就是手柄ID(绿灯模式是0x41),然后再发送接收,根据接收到数据判断哪一位按下(按下为...uint8_t cmd[3] = {0x01,0x42,0x00}; // 请求接受数据 uint8_t PS2data[9] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00...通过位运算就可以很简单把所有按键值提取出来,做到全按键无冲突。 摇杆我个人习惯时1-1000范围均匀变化,手柄返回值是0-255变化,这个强制转换也就很简单可以完成了。

1K10

STM32–RFID无线射频技术(RC522刷卡模块)

该频段 波长大约为2500m; 除了金属材料影响外,一般低频能够穿过任意材料物品不降低它读取距离; 工作在低频读写器在全球没有任何特殊许可限制; 低频产品有不同封装形式。...甚高频频段电波不能通过许多材料,特别是水,灰尘,雾等悬浮颗粒物资。相对于高频电子 签来说,该频段电子标签不需要和金属分开来。 电子标签天线一般是长条和标签状。..._SendByte * 描述 :向RC522发送1 Byte 数据 * 输入 :byte,要发送数据 * 返回 : RC522返回数据 * 调用 :内部调用 */ void SPI_RC522_SendByte..._ReadByte * 描述 :从RC522发送1 Byte 数据 * 输入 :无 * 返回 : RC522返回数据 * 调用 :内部调用 */ u8 SPI_RC522_ReadByte ( void...RC522和ISO14443卡通讯 * 输入 :ucCommand,RC522命令字 * pInData,通过RC522发送到卡片数据 * ucInLenByte,发送数据字节长度 * pOutData

2.7K10

STM32F103+RFID-RC522模块 实现简单读卡写卡demo「建议收藏」

}; u8 KEY_B3[6]= { 0x01,0x02,0x03,0x00,0x00,0x00}; // 置零用 unsigned char DATA0[16]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00..._8b; //设置SPI数据大小:SPI发送接收8位帧结构 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;..., ENABLE); //使能SPI外设 } /* * 函数名:SPI_RC522_SendByte * 描述 :向RC522发送1 Byte 数据 * 输入 :byte,要发送数据 * 返回 :..._ReadByte * 描述 :从RC522发送1 Byte 数据 * 输入 :无 * 返回 : RC522返回数据 * 调用 :内部调用 */ u8 SPI_RC522_ReadByte ( void...RC522和ISO14443卡通讯 * 输入 :ucCommand,RC522命令字 * pInData,通过RC522发送到卡片数据 * ucInLenByte,发送数据字节长度 * pOutData

2.8K30

PS2手柄通讯协议解析—附资料和源码「建议收藏」

二.PS2通讯协议介绍 PS2采用SPI通信协议,SPI是串行外设接口缩写,是一种高速、全双工、同步通信总线,并且在芯片管脚上只占用四根线(DI、DO、CS、CLK),节约了芯片管脚,同时为...CS线在通讯期间拉低,通信过程中CS信号线在一串数据(9个字节,每个字节为8位)发送完毕后才会拉高,不是每个字节发送完拉高。 2. DO、DI在在CLK时钟下降沿完成数据发送和读取。...通过 对这两个数处理,得到按键状态并返回键值。...PS2_Cmd(0x01); PS2_Cmd(0x44); PS2_Cmd(0X00); PS2_Cmd(0x01);//analog=0x01;digital=0x00 软件设置发送模式...为防止与PS2通信过快乱码导致延迟,需要在主函数while(1)中延时50ms,即加一句delay_ms(50)。

2.7K51

STM32+雷龙SD NAND(贴片SD卡)完成FATFS文件系统移植与测试

我当前使用主控板子是STM32F103ZET6,如果你使用板子不是这一款,可能还是其他CPU也没关系;我这里直接贴出了SPI模拟时序驱动代码,可以直接移植到任何单片机上使用,代码拷贝过去也只需要修改...(扇区数) 返 回 值: 0表示容量检测出错,其他值表示SD卡容量(扇区数/512字节) 说 明: 每扇区字节数必为512字节,如果不是512字节,则初始化不能通过. *...0x00 #define SDCard_CMD55 55 //命令55,应返回0x01 #define SDCard_CMD58 58 //命令58,读OCR信息 #define...->DR; //返回收到数据 } 函数功能:SD卡底层接口,通过SPI时序向SD卡读写一个字节 函数参数:data是要写入数据 返 回 值:读到数据 */ u8 SDCardReadWriteOneByte...不是私人部门从文件对象,缓冲了   /公共部门缓冲文件系统中对象(fatf)是用于该文件   /数据传输. */ #define _FS_NORTC 0 #define _NORTC_MON 1

2.3K10

RC522读卡器 M1卡学习总结(二)

使用stm8s芯片spi接口来和rc522通讯,通过相应寄存器可控制SPI接口数据传输率、数据时钟相位等通信参数。...主设备通过MOSI脚把数据发送给从设备,从设备通过MISO引脚回传数据。这意味全双工通信数据输出和数据输入是用同一个时钟信号同步:时钟信号由主设备通过SCK脚提供。...a中 _asm(“rim”); //开总中断 return; } (5)SPI接收发送字节 //spi接口在写时候要先发送发送不一定要传送内容,只是为了 //给从机提供时钟...; //发送一个byte retry=0; while((SPI_SR|0X80)==0X80); //等待通信结束 while((SPI_SR & 0X01)...==0); //等待接收缓冲区空 { retry++; if(retry>200) return 0; } return SPI_DR; //返回受到

1.2K20

Linux下编写ENC28J60网卡驱动,完善网络设备框架

如果自己没有定义自己结构体,就直接填 sizeof(struct net_device) 函数返回值:执行成功返回申请空间地址。 空间分配函数还有一个 alloc_netdev()函数。...:网络设备信息 struct net_device 函数返回值:执行成功返回 0。...它还提供了一个内部 DMA 模块, 以实现快速数据吞吐和硬件支持 IP 校验和计算。 与主控制器通信通过两个中断引脚和 SPI 实现,数据传输速率高达 10 Mb/s。...如果PADCFG规定要 //追加有效CRC,则必须将TXCRCEN 置1。 //0 = MAC不会追加CRC。 检查最后4 个字节,如果不是有效CRC 则报告给发送状态向量。...//当PHCON1.PDPXMD = 0 且PHCON1.PLOOPBK = 0 时: //1 = 要发送数据仅通过双绞线接口发出 //0 = 要发送数据会环回到MAC 并通过双绞线接口发出 ENC28J60

4.1K20
领券