RTT操作系统写SD卡时出现等待超时错误
static rt_err_t _write_block(struct rt_spi_device* device, const void * buffer, uint32_t block_size, uint8_t token){
struct rt_spi_message message;
uint8_t send_buffer;
rt_memset(send_buffer, DUMMY, sizeof(send_buffer));
send_buffer = token;
/* send start block token */
{
/* initial message */
message.send_buf = send_buffer;
message.recv_buf = RT_NULL;
message.length = sizeof(send_buffer);
message.cs_take = message.cs_release = 0;
/* transfer message */
device->bus->ops->xfer(device, &message);
}
/* send data */
{
/* initial message */
message.send_buf = buffer;
message.recv_buf = RT_NULL;
message.length = block_size;
message.cs_take = message.cs_release = 0;
/* transfer message */
device->bus->ops->xfer(device, &message);
}
/* put crc and get data response */
{
uint8_t recv_buffer;
uint8_t response;
/* initial message */
message.send_buf = send_buffer;
message.recv_buf = recv_buffer;
message.length = sizeof(recv_buffer);
message.cs_take = message.cs_release = 0;
/* transfer message */
device->bus->ops->xfer(device, &message);
// response = 0x0E & recv_buffer;
response = MSD_GET_DATA_RESPONSE(recv_buffer);
if(response != MSD_DATA_OK)
{
MSD_DEBUG(" write block fail! data response : 0x%02X\r\n", response);
return RT_ERROR;
}
}
/* wati ready */
return _wait_ready(device);
}
在函数最后 return _wait_ready(device)处时间超时,一直找不到是什么原因。还请各位大侠予以帮助,谢谢 是否可以枚举到卡?以及硬件上拉等?
或换张卡。 aozima 发表于 2016-2-18 14:55
是否可以枚举到卡?以及硬件上拉等?
或换张卡。
1)枚举到卡?
2)使用的是SPI模式,CS,CLK,MISO,MOSI都有10K上拉。
3)换张卡也会有同样的问题。
而且并不是每次写入操作都有超时,而是没有规律的。
用示波器扫一下波形看看 Lindaic 发表于 2016-2-18 16:35
1)枚举到卡?
2)使用的是SPI模式,CS,CLK,MISO,MOSI都有10K上拉。
3)换张卡也会有同样的问题。
后来怎么解决的,我也遇到了,卡死在超时那,也是偶尔出现,我都怀疑是这个品牌的SD卡不行
页:
[1]