Lindaic 发表于 2016-2-18 13:10

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

是否可以枚举到卡?以及硬件上拉等?
或换张卡。

Lindaic 发表于 2016-2-18 16:35

aozima 发表于 2016-2-18 14:55
是否可以枚举到卡?以及硬件上拉等?
或换张卡。

1)枚举到卡?
2)使用的是SPI模式,CS,CLK,MISO,MOSI都有10K上拉。
3)换张卡也会有同样的问题。
而且并不是每次写入操作都有超时,而是没有规律的。

阿南 发表于 2016-2-20 09:25

用示波器扫一下波形看看

yylfcxpx168 发表于 2021-12-15 21:47

Lindaic 发表于 2016-2-18 16:35
1)枚举到卡?
2)使用的是SPI模式,CS,CLK,MISO,MOSI都有10K上拉。
3)换张卡也会有同样的问题。


后来怎么解决的,我也遇到了,卡死在超时那,也是偶尔出现,我都怀疑是这个品牌的SD卡不行
页: [1]
查看完整版本: RTT操作系统写SD卡时出现等待超时错误