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

为什么通过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,表示执行成功。

6.6K40

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。

76210
  • 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.7K20

    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.6K31

    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

    55910

    瀚海微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字段表示。

    15410

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

    在我的实验里面,我把选卡的操作加了一个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

    2.3K40

    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

    3.1K10

    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

    3.2K30

    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变化,这个强制转换也就很简单可以完成了。

    1.2K10

    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.5K10

    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)。

    3.2K51

    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.2K20
    领券