nRF52840 + SES で SDカードサンプルプログラムを試す
環境
- Nordic nRF5 SDK v15.2.0
- SEGGER Embedded studio for ARM V4.10a
- J-link v9(中華製)
- Raytac MDBT50Q-DB
中華製の micro SD カード DIP 化モジュールを使いました。
接続
ジャンパーワイヤーを使って接続します。
nRF52840側は、空いているGPIOに接続しました。
microSD側 | MDBT50Q DB(nRF52840)側 |
---|---|
CLK(SCK) | P0.22 |
MOSI | P0.14 |
MISO | P0.25 |
CS | P0.23 |
3V3 | 適当なVCC |
GND | GND |
但し、GPIOは Low frequency I/O only というのがあるらしく、それだけ注意(巻末のおまけ参照)。
なお、写真の上に伸びているものは J-Link へのケーブル、下側の黒いケーブルは適当な GND に接続しています。
全体構成。
サンプルプログラム
examples/peripheral/fatfs を基に、以下のように変更しました。
fatfs フォルダの中の pca10056/blank/ses/fatfs_pca10056.emProject
を開きます。
/*
#define SDC_SCK_PIN ARDUINO_13_PIN ///< SDC serial clock (SCK) pin.
#define SDC_MOSI_PIN ARDUINO_11_PIN ///< SDC serial data in (DI) pin.
#define SDC_MISO_PIN ARDUINO_12_PIN ///< SDC serial data out (DO) pin.
#define SDC_CS_PIN ARDUINO_10_PIN ///< SDC chip select (CS) pin.
*/
#define SDC_SCK_PIN 22 ///< SDC serial clock (SCK) pin.
#define SDC_MOSI_PIN 14 ///< SDC serial data in (DI) pin.
#define SDC_MISO_PIN 25 ///< SDC serial data out (DO) pin.
#define SDC_CS_PIN 23 ///< SDC chip select (CS) pin.
ちなみに、元々の設定の ARDUINO_12_PIN だとかの割当は以下のようになっていました。
#define ARDUINO_13_PIN NRF_GPIO_PIN_MAP(1, 15) // Digital pin 13
#define ARDUINO_12_PIN NRF_GPIO_PIN_MAP(1, 14) // Digital pin 12
#define ARDUINO_11_PIN NRF_GPIO_PIN_MAP(1, 13) // Digital pin 11
#define ARDUINO_10_PIN NRF_GPIO_PIN_MAP(1, 12) // Digital pin 10
(Nordic/SDK/components/boards/pca10056.h)
実行結果は NRF_LOG_INFO で情報が出るようになっています。
sdk_config.h 中では、
#ifndef NRF_LOG_BACKEND_UART_ENABLED
#define NRF_LOG_BACKEND_UART_ENABLED 1
#endif
となっているので UART に出力されるようになっています。
今回は、RTTに出力するので
#ifndef NRF_LOG_BACKEND_UART_ENABLED
#define NRF_LOG_BACKEND_UART_ENABLED 1
#endif
とし、代わりに
#ifndef NRF_LOG_BACKEND_RTT_ENABLED
#define NRF_LOG_BACKEND_RTT_ENABLED 0
#endif
を以下に変更しました。
#ifndef NRF_LOG_BACKEND_RTT_ENABLED
#define NRF_LOG_BACKEND_RTT_ENABLED 1
#endif
これで、Debug Terminal に出力されるようになります。
実行結果
「Build」 - 「Build and Debug」 で試してみます。
「Disk initialization failed.」エラーが出ています。何回か実行しなおして、3回めに成功しています。これは、ジャンパーピンの接触が悪く、3回めは手で押さえながら実行したものです。
おまけ 低速用の GPIO ピン
nRF52840 では、「Low frequency I/O only」 として、以下の GPIO ピンが指定されています。
- P0.02
- P0.03
- P0.09
- P0.10
- P0.28
- P0.30
- P1.01
- P1.02
- P1.03
- P1.04
- P1.05
- P1.06
- P1.07
- P1.10
- P1.11
- P1.12
- P1.13
- P1.14
- P1.15
Low frequency I/O is signals with a frequency up to 10 kHz.とDatasheetにはあります。
https://devzone.nordicsemi.com/f/nordic-q-a/36367/using-gpios-marked-as-standard-drive-low-frequency-for-spi-on-nrf52840
によると、
due to HF interference being injected into the RF radio
だそうです。このQ&Aでは、8MHzのSPIで使えたけど?と質問があります。実際に僕はSPIではなくI2Cで該当ピンを使ってみて、単体テストでは使えましたがいろんな機能と共に動かすと不安定になりました。
Author And Source
この問題について(nRF52840 + SES で SDカードサンプルプログラムを試す), 我々は、より多くの情報をここで見つけました https://qiita.com/nanbuwks/items/deebc844dba58ebc5eb1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .