MSP430 SD卡SPI读写操作(2) —— SD卡SPI操作流程
2016-06-12 10:31
387 查看
本节介绍SD卡SPI模式基本操作流程,包括初始化、读和写的相关命令和操作流程。
相关命令和响应的描述请见第一节:MSP430
SD卡SPI读写操作(1) —— SD卡命令
一、SPI模式
二、RESET(SD卡复位)
三、SD卡初始化
四、SD卡读单块
五、SD卡读多块
六、SD卡写单块
七、SD卡写多块
SD卡SPI模式需要SD卡作为从机,MCU作为主机进行通信。可以采用三线SPI(SCLK,MISO,MOSI)外加一个片选信号线CS来进行控制和通信。需要注意一下几点:
1、SD卡的初始化速度不能大于400KHz,即复位和初始化过程SPI的速率要限制在400KHz以下,在实际测试过程中,即使速率小于400KHz,也会出现一定几率的初始化失败,最后在多次尝试后将速率设置在125KHz后比较稳定,不知道是不是和电路有关系。
2、SPI的极性 = 1 相位 = 0
3、向SD卡写入命令的过程为
(1) 拉低CS
(2) 向SD卡写入指令,然后附加发送8个时钟,使SD卡完成此次操作
(3) 接收SD卡响应
(4) 拉高CS,然后附加发送8个时钟
4、发送 ACMD 指令时,需要首先发送 CMD55 告诉SD卡下一条指令为应用程序特定指令( ACMD 指令)。
SD卡在上电后是处于SD模式,RESET命令使其进入SPI模式。具体流程为:
1、拉高CS,发送至少74个时钟周期使SD卡稳定
2、拉低CS,发送CMD0
3、由第一节知CMD0返回R1,需要收到回应0x01表示 in idle state
4、拉高CS,附加发送8个时钟
后面的操作因为CS的操作没有特殊情况,因此不列出了。
SD卡初始化可以使用CMD1 和 ACMD41 两种方式。官方文档不推荐CMD1方式
4000
,原因有两个:一是对于1.4mm厚的标准尺寸SD卡,CMD1是非法的指令;二是因为ACMD41可以很容易的区分SD卡和MMC卡。在这里只介绍ACMD41初始化方式。
1、发送CMD55,收到0x01表示 in idle state
2、发送ACMD41,返回R1,在这里R1的in idle state用来表示SD卡是否处于初始化状态,因此需要循环读取直到0x00
1、发送CMD17,收到0x00表示发送成功
2、连续读取知道读到0xFE
3、读一个block (通常为512字节)
4、读两个CRC字节
1、发送CMD18,收到0x00表示发送成功
2、连续读直到读到0xFE
3、读一个block (通常为512字节)
4、读两个CRC字节
5、如果要读取下一个block,重复步骤2-4
6、发送CMD12来停止读多块操作
1、发送CMD24,收到0x00表示发送成功
2、发送若干时钟
3、发送写开始标志0xFE
4、发送一个block (通常为512字节)
5、发送两个CRC字节
6、连续读直到读到二进制 xxx00101表示数据写入成功
7、连续读忙检测,直到读到0xFF表示操作完成
1、发送CMD25,收到0x00表示发送成功
2、发送若干时钟
3、发送写开始标志0xFC
4、发送一个block (通常为512字节)
5、发送两个CRC字节
6、连续读直到读到二进制 xxx00101表示数据写入成功
7、如果想写下一个block,则重复步骤2 - 6
8、发送写停止标志 0xFD 来停止写操作
7、连续读忙检测,直到读到0xFF表示操作完成
相关命令和响应的描述请见第一节:MSP430
SD卡SPI读写操作(1) —— SD卡命令
一、SPI模式
二、RESET(SD卡复位)
三、SD卡初始化
四、SD卡读单块
五、SD卡读多块
六、SD卡写单块
七、SD卡写多块
一、SPI模式
SD卡SPI模式需要SD卡作为从机,MCU作为主机进行通信。可以采用三线SPI(SCLK,MISO,MOSI)外加一个片选信号线CS来进行控制和通信。需要注意一下几点:1、SD卡的初始化速度不能大于400KHz,即复位和初始化过程SPI的速率要限制在400KHz以下,在实际测试过程中,即使速率小于400KHz,也会出现一定几率的初始化失败,最后在多次尝试后将速率设置在125KHz后比较稳定,不知道是不是和电路有关系。
2、SPI的极性 = 1 相位 = 0
3、向SD卡写入命令的过程为
(1) 拉低CS
(2) 向SD卡写入指令,然后附加发送8个时钟,使SD卡完成此次操作
(3) 接收SD卡响应
(4) 拉高CS,然后附加发送8个时钟
4、发送 ACMD 指令时,需要首先发送 CMD55 告诉SD卡下一条指令为应用程序特定指令( ACMD 指令)。
二、RESET(SD卡复位)
SD卡在上电后是处于SD模式,RESET命令使其进入SPI模式。具体流程为:1、拉高CS,发送至少74个时钟周期使SD卡稳定
2、拉低CS,发送CMD0
3、由第一节知CMD0返回R1,需要收到回应0x01表示 in idle state
4、拉高CS,附加发送8个时钟
后面的操作因为CS的操作没有特殊情况,因此不列出了。
三、SD卡初始化
SD卡初始化可以使用CMD1 和 ACMD41 两种方式。官方文档不推荐CMD1方式4000
,原因有两个:一是对于1.4mm厚的标准尺寸SD卡,CMD1是非法的指令;二是因为ACMD41可以很容易的区分SD卡和MMC卡。在这里只介绍ACMD41初始化方式。
1、发送CMD55,收到0x01表示 in idle state
2、发送ACMD41,返回R1,在这里R1的in idle state用来表示SD卡是否处于初始化状态,因此需要循环读取直到0x00
四、SD卡读单块
1、发送CMD17,收到0x00表示发送成功2、连续读取知道读到0xFE
3、读一个block (通常为512字节)
4、读两个CRC字节
五、SD卡读多块
1、发送CMD18,收到0x00表示发送成功2、连续读直到读到0xFE
3、读一个block (通常为512字节)
4、读两个CRC字节
5、如果要读取下一个block,重复步骤2-4
6、发送CMD12来停止读多块操作
六、SD卡写单块
1、发送CMD24,收到0x00表示发送成功2、发送若干时钟
3、发送写开始标志0xFE
4、发送一个block (通常为512字节)
5、发送两个CRC字节
6、连续读直到读到二进制 xxx00101表示数据写入成功
7、连续读忙检测,直到读到0xFF表示操作完成
七、SD卡写多块
1、发送CMD25,收到0x00表示发送成功2、发送若干时钟
3、发送写开始标志0xFC
4、发送一个block (通常为512字节)
5、发送两个CRC字节
6、连续读直到读到二进制 xxx00101表示数据写入成功
7、如果想写下一个block,则重复步骤2 - 6
8、发送写停止标志 0xFD 来停止写操作
7、连续读忙检测,直到读到0xFF表示操作完成
相关文章推荐
- msp430中adc12与PWM配合使用
- 基于LaunchPad的Nokia5110显示
- msp430 按键 中断 轮询
- msp430 timerA interrupt
- MSP430 AD 单通道单次转换
- i/O 中断
- MSP430F149学习笔记——时钟
- MSP430F149学习笔记——时钟
- MSP430移植μCOS-II系统之时间管理函数OSTimeDlyHMSM()延时不准确解析
- 对于MSP430与SIM900A无法通信的问题解决
- MSP430仿真器降级失败的解决办法
- msp430学习笔记之时钟
- msp430学习笔记之uart
- msp430学习笔记之中断处理函数
- msp430单片机实现常按键和短按键加去抖功能
- msp430f5310定时器的认识
- 关于软件I2C与MSP430通信的问题
- MSP430 Launchpad MSP430g2452 SHT10 温湿度传感器
- 手把手教你使用TI MSP430 LaunchPad
- [MSP430] 1.第一个工程