非常的感谢hq1025,stf的帮助!
我更改了端口的初始化程序,使用周立功的代码,可以读出SD的容量,扇区数等信息,可是写了数据读出来全是0xFF或者0x00.这是为什么?
1,关于NSS,如hq1025说的,初始化为NSS后,它可做普通的IO来实现CS.这一点已 证明可以.
2,如hq1025说的,我改了接收函数为:
INT8U SPI_RecByte(void) { SSP_ClearFlag(SSP0, SSP_FLAG_RxTimeOut); SSP_ClearFlag(SSP0,SSP_FLAG_RxOverrun); SSPx->SR &= 0xFB; // SPI_SendByte(0xFF); // 这里为什么要发0xFF?????????? /* loop while Receive FIFO is empty */ while(SSP_GetFlagStatus(SSP0,SSP_FLAG_RxFifoNotEmpty) == RESET); //for(u16 i=0; i<65535; i++); /* return the byte read from the SPI bus */ return((u8)SSP_ReceiveData(SSP0));//>>8); }
3,按照STF的修改了IO口的设置.
4,初始化成功说明,通信应该没有问题.问题在于命令! 我写了512个字节到第0 块,然后读出来总是0或者0xFF.不明白究竟是写有问题,还是读有问题.我没有使用CRC. 程序如下: for(i=0; i<512; i++) { Tx_Buffer = i; } SD_WriteBlock(0,Tx_Buffer); //此函数发送CMD24. SD_ReadBlock(0,Rx_Buffer); //此函数发送CMD17.
请问:读写的时候,还应该注意什么? |