- //-----------------------------------------------------------------------------------------------
- 向SD卡中写入命令,并返回回应的第二个字节
- //-----------------------------------------------------------------------------------------------
- unsigned char Write_Command_SD(unsigned char *CMD)
- {
- unsigned char tmp;
- unsigned char retry=0;
- unsigned char i;
- //禁止SD卡片选
- SPI_CS=1;
- //发送8个时钟信号
- Write_Byte_SD(0xFF);
- //使能SD卡片选
- SPI_CS=0;
- //向SD卡发送6字节命令
- for (i=0;i<0x06;i++)
- {
- Write_Byte_SD(*CMD++);
- }
- //获得16位的回应
- Read_Byte_SD(); //read the first byte,ignore it.
- do
- { //读取后8位
- tmp = Read_Byte_SD();
- retry++;
- }
- while((tmp==0xff)&&(retry<100));
- return(tmp);
- }
2) 初始化
SD卡的初始化是非常重要的,只有进行了正确的初始化,才能进行后面的各项操作。在初始化过程中,SPI的时钟不能太快,否则会造初始化失败。在初始化成 功后,应尽量提高SPI的速率。在刚开始要先发送至少74个时钟信号,这是必须的。在很多读者的实验中,很多是因为疏忽了这一点,而使初始化不成功。随后 就是写入两个命令CMD0与CMD1,使SD卡进入SPI模式
初始化时序图: |