動作環境
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の以下の部分で行っているようである。
.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));
}
情報
-
SDカードを使ってみよう
- by K.I様
情報感謝です。
上記の例ではCMD0はconst char CMD0[] = {6,0x40,0x00,0x00,0x00,0x00,0x95};
のように定義されている。
Zephyrで送信するCMD0と最後の部分が異なる (0x94と0x95)。
違いはあるが、STM32L476の方の処理は成功している。