SDSD卡程序初始化不成功,返回错误号码为0x04,表示卡不支持3.3V电压,但是我的卡是可以在读卡器里面工作的啊。为什么会出现这个问题?
如果把3.3V电压的程序注释掉后,发现读会发生0x21,写会发生0x22,擦除会发生0x33的错误,是什么道理啊?
我的接线为LPC2138 P0.4 SD_SCK P0.5 SD_MISO P0.6 SD_MOSI P1.24 SD_POWER P1.25 SPI_CS P0.3 SD_INSERT P0.2 SD_WP
sdconfig.h的程序如下: /* SCK引脚 */ #define SPI_SCK (0x01 << 4) #define SPI_SCK_GPIO() PINSEL0 &= ~(0x03 << 8) /* 设置 SCK 口为GPIO口 */ #define SPI_SCK_OUT() IODIR |= SPI_SCK /* 设置 SCK 口为输出口 */ #define SPI_SCK_CLR() IOCLR = SPI_SCK /* 置 SCK 为低电平 */
/* MISO 引脚 */ #define SPI_MISO (0x01 << 5) #define SPI_MISO_GPIO() PINSEL0 &= ~(0x03 << 10) /* 设置 MISO 口为GPIO口 */ #define SPI_MISO_OUT() IODIR |= SPI_MISO /* 设置 MISO 口为输出口 */ #define SPI_MISO_CLR() IOCLR = SPI_MISO /* 置 MISO 为低电平 */
/* MOSI 引脚 */ #define SPI_MOSI (0x01 << 6) #define SPI_MOSI_GPIO() PINSEL0 &= ~(0x03 << 12) /* 设置 MOSI 口为GPIO口 */ #define SPI_MOSI_OUT() IODIR |= SPI_MOSI /* 设置 MOSI 口为输出口 */ #define SPI_MOSI_CLR() IOCLR = SPI_MOSI /* 置 MISO 为低电平 */
/* CS 引脚 */ #define SPI_CS (0x01 << 25) #define SPI_CS_GPIO() PINSEL2 = 0x04 /* 设置 CS 口为GPIO口 */ #define SPI_CS_OUT() IODIR |= SPI_CS; /* 设置 CS 口为输出口 */ #define SPI_CS_SET() IOSET |= SPI_CS; /* 置 CS 为高电平 */ #define SPI_CS_CLR() IOCLR |= SPI_CS; /* 置 CS 为低电平 */
/* 初始化 IO 口为SPI接口 */ #define SPI_INIT() PINSEL0 &= ~((0x03 << 8) + (0x03 << 10) + (0x03 << 12)); PINSEL0 |= (0x01 << 8) + (0x01 << 10) + (0x01 << 12); /* 电源控制引脚 */ #define SD_POWER (0x01 << 24) #define SD_POWER_GPIO() PINSEL2 = 0x04 /* 设置 POWER 口为GPIO口 */ #define SD_POWER_OUT() IODIR |= SD_POWER /* 设置 POWER 口为输出口 */ #define SD_POWER_OFF() IOSET = SD_POWER /* 置 POWER 为高电平 */ #define SD_POWER_ON() IOCLR = SD_POWER /* 置 POWER 为低电平 */
/* 卡完全插入卡座检测引脚 */ #define SD_INSERT (0x01 << 3) #define SD_INSERT_GPIO() PINSEL0 &= ~(0x03 << 6) /* 设置 INSERT 口为GPIO口 */ #define SD_INSERT_IN() IODIR &= ~SD_INSERT /* 设置 INSERT 口为输出口 */ #define SD_INSERT_STATUS() (IOPIN & SD_INSERT) /* 读取 INSERT 口的状态 */
/* 卡写保护检测引脚 */ #define SD_WP (0x01 << 2) #define SD_WP_GPIO() PINSEL0 &= ~(0x03 << 4) /* 设置 INSERT 口为GPIO口 */ #define SD_WP_IN() IODIR &= ~SD_WP /* 设置 INSERT 口为输出口 */ #define SD_WP_STATUS() (IOPIN & SD_WP) /* 读取 INSERT 口的状态 */
其他地方没有动,然后采用的是SDExample.exe来测试,发现了如上的结果,是硬件的问题么,还是软件的问题?
同事可以说明的是,在这个板子上和同样一个SD卡上曾经可以建立文件和文件夹,但是只看到了一次,后面就再也不行了。
能告知么? |