動作環境
Ubuntu 18.04 LTS
ボード: STM32L476 Nucleo_64 (以下、STM32L476)
ボード: STM32F769 Discovery Kit (以下、STM32F769)
Zephyr 2.1.0-rc1
前回
STM32L476でSPI2の使用に失敗していた。
フォーラムでの質問と回答
公式フォーラムに質問して回答をすぐに得ることが出来た。
感謝。
overlayファイルに&spi2の記述を足せば良いとのこと。
オーバレイファイル
spi2の記載を足して、SDHC関連の記載もそこに追加した。
nucleo_l476rg.overlay
/*
2019-12-28 yasokada
- modified for STM32L476 SPI2
2019-12-15 yasokada
branched from [nrf52840_blip.overlay]
*/
/*
* Copyright (c) 2019 Tavish Naruka <tavishnaruka@gmail.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
/*
&spi1 {
status = "okay";
cs-gpios = <&gpioc 7 0>;
sdhc0: sdhc@0 {
compatible = "zephyr,mmc-spi-slot";
reg = <0>;
status = "okay";
label = "SDHC0";
spi-max-frequency = <24000000>;
};
};
*/
&spi2 {
status = "okay";
cs-gpios = <&gpiob 12 0>;
sdhc0: sdhc@0 {
compatible = "zephyr,mmc-spi-slot";
reg = <0>;
status = "okay";
label = "SDHC0";
spi-max-frequency = <24000000>;
};
};
SPI2接続
接続は以下のようにした。
- microSD <-> STM32L476, ケーブル色
- DAT0/DO ----------- (PB14) CN10:28, 青
- VSS --------------- GND CN5:7, 緑
- CLK --------------- (PB13) CN10:30, 黄
- VDD --------------- 3V3 CN6:4, 赤
- CMD/DI ------------ (PB15) CN10:26, 赤
- CS ---- 4.7k ------ (PB12) CN10:16, 白
4.7k: VDDに接続してプルアップとしている。
ビルドと実行
$ west build -p auto -b nucleo_l476rg samples/subsys/fs/fat_fs/
$ west flash
$ west flash
west flashは一回目に失敗する場合があり、二回すると成功する。
USB接続直後などに起きやすい気はする。
$ west debug
...
(gdb) break main.c:69
c
69 if (res == FR_OK) {
(gdb) p res
$1 = 0
resが0となり、67行目の int res = fs_mount(&mp);
が成功していることが分かる。