我用51模拟spi驱动sd卡可以reset但是init总是失败

我是勤劳的小码农 我是勤劳的小码农 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的内存卡是2g的,hc,sc我就不清楚了。我的reset函数正常,但是init函数读到的都是0xff。
函数如下:
bit SD_Reset()
{
char dataa[6]={0x40,0x00,0x00,0x00,0x00,0x95};
unsigned char dir,returndata=0;

CS=1;
for(dir=0;dir<120;dir++)
SPI_Rw(0xff);
CS=0;
SPI_Rw(dataa[0]);
SPI_Rw(dataa[1]);
SPI_Rw(dataa[2]);
SPI_Rw(dataa[3]);
SPI_Rw(dataa[4]);
SPI_Rw(dataa[5]);
do
{
returndata=SPI_Rw(0xff);
dir++;
}
while((returndata!=01)&&(dir<240));
CS=1;
SPI_Rw(0xff);
if(returndata==0x01)
return (1);
else
return (0);
}
bit SD_Init()
{
char dataa[6]={0x41,0x00,0x00,0x00,0x00,0xff};
unsigned char dir=0,returndata=0;

CS=0;
SPI_Rw(dataa[0]);
SPI_Rw(dataa[1]);
SPI_Rw(dataa[2]);
SPI_Rw(dataa[3]);
SPI_Rw(dataa[4]);
SPI_Rw(dataa[5]);
do
{
returndata=SPI_Rw(0xff);
dir++;
}
while(((returndata!=0x00)&&(dir<240)));
SBUF=returndata;
while(1);
CS=1;
SPI_Rw(0xff);
if(returndata==0x00)
return (1);
else
return (0);
}

我在主程序里的调用是
SBUF=SD_Reset();
flag=1;//spi减速标志,减速后spi有任何改变都延时200us
SBUF=SD_Init();

SBUF收到的都是0xff。求解
...全文

相关推荐

sd卡程序[总结].pdf

sd卡程序[总结].pdf

czq131452007

Proteus仿真与51单片机25例实战:从SD卡到波形发生器

在嵌入式系统开发中,硬件电路设计能力与软件编程同样重要。SPI协议作为经典的同步串行接口,广泛应用于SD卡存储扩展等场景;单总线协议则通过一根信号线实现温度传感等低速通信。理解这些总线协议的原理与仿真验证方法,是提升单片机应用水平的关键。Proteus仿真软件为开发者提供了灵活的电路搭建与波形分析环境,通过仿真电路图能够直观验证时序逻辑和外围电路设计,弥补开发板固定连线的不足。本文结合25个51单片机实战案例,涵盖SD卡读写、DS18B20温度采集、DAC波形发生器等典型应用,重点剖析SPI时序、单总线复位

weixin_34384557

SPI通信协议详解:从四种工作模式到STM32实战与故障排查

串行外设接口(SPI)作为一种高速、全双工的同步串行通信总线,是嵌入式系统中连接单片机与各类外设的核心技术之一。其工作原理基于主从架构和共享时钟信号,通过简单的四线制(SCLK、MOSI、MISO、CS)实现高效数据交换,避免了异步通信的波特率误差问题。SPI的技术价值在于其高速度和实时性,特别适用于对数据传输速率要求苛刻的场景,如驱动TFT显示屏、读写SPI Flash存储器或与高速ADC/DAC芯片通信。深入理解其时钟极性(CPOL)与时钟相位(CPHA)构成的四种工作模式,是确保主从设备时序匹配、通信

weixin_34130389

嵌入式开发八大通信协议全解析:从UART、I2C、SPI到CAN、USB实战指南

在嵌入式系统设计中,通信协议是连接微控制器与各类传感器、执行器和外部模块的核心技术基础。其原理在于定义了一套标准化的物理层、数据链路层和时序规则,确保设备间数据能够准确、可靠地交换。掌握这些协议的技术价值在于,开发者能够根据项目需求,在速度、可靠性、引脚资源和复杂度之间做出最优选型,从而构建高效稳定的嵌入式系统。从基础的异步串口UART用于调试打印,到两线制的I2C连接多个低速传感器,再到高速全双工的SPI驱动存储设备,以及高可靠的CAN总线应用于汽车电子,乃至USB实现与主机的复杂交互,这些协议覆盖了从板

weixin_30788239

嵌入式开发必知:UART、I2C、SPI等8大通信协议核心原理与实战指南

通信协议是嵌入式系统实现设备间数据交换与协同工作的基础技术。其核心原理在于定义了一套标准化的数据编码、传输时序与电气规范,确保信息在硬件层面可靠传递。从技术价值看,掌握不同协议的特性是进行高效硬件选型、系统架构设计与性能优化的关键。在应用场景上,UART常用于调试打印与模块对接,I2C适合连接板上多个低速传感器以节省引脚,SPI则服务于需要高速数据传输的显示屏或存储器,而CAN与RS-485凭借其差分信号和抗干扰能力,成为工业控制与汽车电子等恶劣环境下的首选。本文聚焦于嵌入式单片机开发中最核心的UART、I

weixin_34185512
评论
收藏 已收藏
分享
返回顶部