下是做SD卡试验时使用的电路图:
SD卡试验时使用的电路图JPG
fSD_CS连接到单片机的片选SD管脚,只有单片机设置SD_CS为低电平时才可以操作SD卡。MOSI连接单片机SPI总线的MOSI管脚(SPI数据输入),单片机从这个管脚读取SD卡内的数据。MISO连接单片机SPI总线的MISO管脚(SPI数据输出)、单片机通过这个管脚向SD卡内写入数据。SCK连接单片机SPI总线的SCKSPI时钟)SD管脚实际上在SD卡内部连接到了GND,当SD插座上没插入SD卡时,单片机从这个管脚能读到高电平(前提是使用单片机内部上拉输入,或者外部增加一个上拉电阻),一旦插入SD卡,这个管脚就变成低电平,这个功能用来检测是否插入SD卡。RSV1和RSV2是保留功能管脚,不需要操作。MicroSD卡的连接和SD卡大同小异,只是MicroSD卡比SD卡少一个GND管脚,所以不能使用上面做的这种插入卡的检测,实际上现在很多SD卡MicroSD卡插座都有插入检测管脚,当然,一分钱一分货,价格上当然也要贵一些顺便提一下,普通SD卡插座最多5块钱。
SPI命令格式
Byte1
Byte25
Byte6
765
0
31
0
7
0
01Comma
d
Comma
dArgume
t
CRC1
以下是一个简单的测试SD卡读写的程序,程序是基于Atmega128单片机编写的,对于Atmega的其他单片机仅需要做管脚改动就可以使用,其他单片机更改要更大。
sdh
SPI各线所占用的端口
defi
eSD_SS
PB6
defi
eSD_SCK
PB1
defi
eSD_MOSIPB2
defi
eSD_MISOPB3
defi
eSD_DDRdefi
eSD_PORTdefi
eSD_PIN
DDRBPORTBPINB
fdefi
eSD_SS_HSD_PORT1defi
eSDSS_LSD_PORT1defi
eSD_SCK_HSD_PORT1defi
eSD_SCK_LSD_PORT1defi
eSD_MOSI_HSD_PORT1defi
eSD_MOSI_LSD_PORT1
defi
eSD_MISO_INSD_PIN1
错误号
defi
eINIT_CMD0_ERROR
0xFF
defi
eINIT_CMD1_ERROR
0xFE
defi
eWRITE_BLOCK_ERROR0xFD
defi
eREAD_BLOCK_ERROR0xFC
defi
eTRUE
0x01
MMCSD命令命令号从40开始,只列出基本命令,并没有都使用
defi
eSD_RESET
0x400
defi
eSD_INIT
0x401
defi
eSD_READ_CSD
0x409
defi
eSD_READ_CID
0x4010
defi
eSD_STOP_TRANSMISSION0x4012
defi
eSD_SEND_STATUS
0x4013
defi
eSD_SET_BLOCKLEN0x4016
defi
eSD_READ_BLOCK
0x4017
defi
eSD_READ_MULTI_BLOCK0x4018
defi
eSD_WRITE_BLOCK
0x4024
defi
eSD_WRITE_MULTI_BLOCK0x4025
片选关MMCSDr