入SPI模式,否则工作在SD总线模式。对于不带SPI串行总线接口的SST89E58RDA单片机来说,用软件来模拟SPI总线操作的具体做法是:将P0.3口(模拟CLK线)的初始状态设置为1,而在允许接收后再置P0.3为0。这样,MCU在输出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至SST89E58RDA单片机的P0.2(模拟MISO线),此后再置P0.3为1,使单片机从P0.1(模拟MOSI线)输出1位数据(先为高位)至串行接口芯片。至此,模拟1位数据输入输出便完成。此后再置P0.3为0,模拟下1位数据的输入输出,依此循环8次,即可完成1次通过SPI总线传输8位数据的操作。SD卡的初始化对SD卡进行操作首先要对SD卡进行初始化,初始化的过程中设置SD卡工作在SPI模式,其流程图如图3所示。图5数据块的读写完成SD卡的初始化之后即可进行它的读写操作。SD卡的读写操作都是通过发送SD卡命令完成的。SPI总线模式支持单块(CMD24)和多块(CMD25)写操作,多块操作是指从指定位置开始写下去,直到SD卡收到一个停止命令CMD12才停止。单块写操作的数据块长度只能是512字节。单块写入时,命令为CMD24,当应答为0时说明可以写入数据,大小为512字节。SD卡对每个发送给自己的数据块都通过一个应答命令确认,它为1个字节长,当低5位为00101时,表明数据块被正确写入SD卡。在需要读取SD卡中数据的时候,读SD卡的命令字为CMD17,接收正确的第一个响应命令字节为0xFE,随后是512个字节的用户数据块,最后为2个字节的CRC验证码。可见,读写SD卡的操作都是在初始化后基于SD卡命令和响应完成操作的,写、读SD卡的程序流程图如图6和图7所示。图7图6另外,利用winhex软件,可以找到音乐文件数据在SD卡中所处扇区号。在读取SD卡数据时可以直接从所需位置开始读取。