Zephyr > microSD (SPIモード接続) + FAT > STM32L476 > CMD0のパラメータが異なる (0x94と0x95)


動作環境
Ubuntu 18.04 LTS
ボード: STM32L476 Nucleo_64 (以下、STM32L476)
ボード: STM32F769 Discovery Kit (以下、STM32F769)
Zephyr 2.1.0-rc1
microSDモジュール: CK-40 (サンハヤト)
ロジック確認: Analog Discovery 2 (AD2)

前回

状況

  • STM32L476でmicroSDの処理が成功
  • STM32F769でmicroSDの処理が失敗

今回

  • STM32L476にてロジックを確認中

0x40, 0x00, 0x00, 0x00, 0x00, 0x94
を送信している。
CMD0の送信に相当するようだ。

そして、0x01を受信している。

実装処理

コマンド送信はdisk_access_spi_sdhc.cの以下の部分で行っているようである。

static int sdhc_spi_tx_cmd(struct sdhc_spi_data *data, u8_t cmd, u32_t payload)
{
    u8_t buf[SDHC_CMD_SIZE];

    LOG_DBG("cmd%d payload=%u", cmd, payload);
    sdhc_spi_trace(data, 0, 0, NULL, 0);

    /* Encode the command */
    buf[0] = SDHC_TX | (cmd & ~SDHC_START);
    sys_put_be32(payload, &buf[1]);
    buf[SDHC_CMD_BODY_SIZE] = crc7_be(0, buf, SDHC_CMD_BODY_SIZE);

    return sdhc_spi_tx(data, buf, sizeof(buf));
}

情報

情報感謝です。

上記の例ではCMD0はconst char CMD0[] = {6,0x40,0x00,0x00,0x00,0x00,0x95};のように定義されている。

Zephyrで送信するCMD0と最後の部分が異なる (0x94と0x95)。

違いはあるが、STM32L476の方の処理は成功している。