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