50 likes | 323 Views
.SD卡在SPI模式下工作原理(该总线通信基于主-从配置) 1.SP接口的引脚:SPI_CS,SPI_SCK,SPI_MISO,SPI_MOSI 2.SPI总线由ss(cs)(CS为低电平,SD卡使能)、sck、sdi、sdo构成 3.SPI总线包括1根串行同步时钟信号线以及2根数据线、 4.SD卡与主机之间的通信:CMD0->CMD55->ACMD41->CMD1 .看STM32ZET6属性表和 stm32 datasheet 1.APB与AHB
E N D
.SD卡在SPI模式下工作原理(该总线通信基于主-从配置).SD卡在SPI模式下工作原理(该总线通信基于主-从配置) 1.SP接口的引脚:SPI_CS,SPI_SCK,SPI_MISO,SPI_MOSI 2.SPI总线由ss(cs)(CS为低电平,SD卡使能)、sck、sdi、sdo构成 3.SPI总线包括1根串行同步时钟信号线以及2根数据线、 4.SD卡与主机之间的通信:CMD0->CMD55->ACMD41->CMD1 .看STM32ZET6属性表和 stm32 datasheet 1.APB与AHB APB:主要用于低带宽的周边外设之间的连接,例如UART、1284等它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。其特性包括:两个时钟周期传输;无需等待周期和回应信号;控制逻辑简单,只有四个控制信号。APB2ENR:
当然还有APB1ENER寄存器 AHB主要用于高性能模块(如CPU、DMA和DSP等)之间的连接 2.GPIO的一些配置寄存器 每个GPI/O 端口有两个32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32 位置位/复位寄存器(GPIOx_BSRR),一个16 位复位寄存器(GPIOx_BRR)和一个32 位锁定寄存器(GPIOx_LCKR)。 GPIO 端口的每个位可以由软件分别配置成多种模式。每个I/O 端口位可以自由编程,然而I/0 端口寄存器必须按32 位字被访问(不允许半字或字节访问)。GPIOx_BSRR 和GPIOx_…
MMC_SD.H代码: #define CMD0 0 //卡复位 应返回0x01 卡即进入Idle State状态. 此时卡将其RCA设为0, 相关寄存器设为传输稳定的最优模式.在向SD卡发送以前需要向SD卡发送74+个时钟 #define CMD9 9 //命令9 ,读CSD数据 CSD保存有如何访问卡的信息 #define CMD10 10 //命令10,读CID数据 #define CMD12 12 //命令12,停止数据传输 #define CMD16 16 //命令16,设置SectorSize 应返回0x00 #define CMD17 17 //命令17,读sector #define CMD18 18 //命令18,读Multi sector #define ACMD23 23 //命令23,设置多sector写入前预先擦除N个block #define CMD24 24 //命令24,写sector #define CMD25 25 //命令25,写Multi sector
#define ACMD41 41 //命令41,应返回0x00 用来判断工作电压是否符合 只有当电压比配时, CID和CSD的数据才能正常传输给主机. #define CMD55 55 //命令55,应返回0x01 发送AMD41之前需发送该命令 #define CMD58 58 //命令58,读OCR信息 #define CMD59 59 //命令59,使能/禁止CRC,应返回0x00 SPI总线配置函数: void SPI2_Configuration(void) { RCC->APB2ENR|=1<<3; //PORTB时钟使能 RCC是时钟配置寄存器 stmdatasheet查看APB2ENR寄存器(PBIO是3位) RCC->APB1ENR|=1<<14; //SPI2时钟使能 SPI2是APB1ENR寄存器14位 GPIOB->CRH&=0X0000FFFF;//PB13.14.15复用输出 GPIOB是GPIO寄存器
GPIOB->CRH|=0XBBB30000;//PB12推挽输出 GPIOB->ODR|=0XF000; //PB12.13.14.15上拉 SPI2->CR1|=0<<10;//全双工模式 SPI2->CR1|=1<<9; //软件nss管理 SPI2->CR1|=1<<8; SPI2->CR1|=1<<2; //SPI主机 SPI2->CR1|=0<<11;//8bit数据格式 SPI2->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1 SPI2->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1 SPI2->CR1|=6<<3; //Fsck=Fcpu/256 SPI2->CR1|=0<<7; //MSBfirst SPI2->CR1|=1<<6; //SPI设备使能 }