Teensy4.0でSDXCカード/exFATを使う (SPI編)

2020年12月13日日曜日

Teensy 4.0

t f B! P L

Teensy4.0ボードのmicrosdとのSDIO接続に関してはこちらの記事で紹介しましたが、比較用としてSPI接続についても報告します。

SPIインターフェイス

SDIOによるSDカードインターフェイスをサポートするTeensy4.0では、SPI接続でSDカードを接続して使用することはほとんどないと思いますが、もちろんSPI接続で使用することができます。SPI2と接続する場合は、Teensy4.0の裏面にあるSDIOインターフェイス用のピン配置そのままで使用することができますが、ここではブレッドボード上で接続が可能なSPI0を使用する場合を示します。

SPIによるSDカード接続
Teensy4.0
ピン番号
Teensy4.0
ピン名
microSD
SPIシールド
microSD
ピン番号/ピン名
GNDGNDGNDGND
3.3V3.3V3.3V3.3V
10CSCS2 / DAT3
11MOSIMOSI3 / CMD
12MISOMISO7 / DAT0
13SCLKSCLK5 / CLK
 
ブレッドボードでのSPIによるmicrosd接続

動作確認環境

SDIOの場合と同様にSdFatのベータ版を使用して、exFATファイルシステムのSDXCカードで動作確認を行います。 SPI接続を行う際の修正箇所は以下の通りです。

SdFat/src/SdFatConfig.hの329行目付近
#define HAS_SDIO_CLASS 1
#endif  // defined(__MK64FX512__) || defined(__MK66FX1M0__)
#if defined(__IMXRT1062__)
// #define HAS_SDIO_CLASS 1   // コメントアウト
#define HAS_SDIO_CLASS 0  // 0で定義する
#endif  // defined(__IMXRT1062__)

SdInfoプロジェクト

SdInfoプロジェクトは修正なしに使用できます。このプロジェクトではSPIクロック周波数は16MHzに設定されています。

benchプロジェクト

benchプロジェクトではSPIクロック周波数は50MHzに設定されていますが、今回のブレッドボード環境では一部カードを正常動作させることはできなかったので、45MHzに落として動作確認しました。 SdFat/examples/bench/bench.inoの10行目、28行目付近
// SD_FAT_TYPE = 0 for SdFat/File as defined in SdFatConfig.h,
// 1 for FAT16/FAT32, 2 for exFAT, 3 for FAT16/FAT32 and exFAT.
// #define SD_FAT_TYPE 0
#define SD_FAT_TYPE 3

~~~~~~~

// Try max SPI clock for an SD. Reduce SPI_CLOCK if errors occur.
// #define SPI_CLOCK SD_SCK_MHZ(50)
#define SPI_CLOCK SD_SCK_MHZ(45)

実行結果

SDIO接続の場合と同様に以下の3つのカードで動作確認をしました。
  • SanDisk microSDXC Ultra A1 64GB (UHS-I Speed-class 1)
  • SanDisk microSDXC Ultra A1 512GB (UHS-I Speed-class 1)
  • SanDisk microSDXC Extreme A2 1TB (UHS-I Speed-class 3)
おおむね、SDIOの場合に比べて1/5程度のアクセススピードとなりました。

SdInfoプロジェクト

SdInfoプロジェクトの実行結果については64GBカードの場合のみ示します。
SdFat version: 2.0.3-beta.1

Assuming the SD is the only SPI device.
Edit DISABLE_CS_PIN to disable an SPI device.

Assuming the SD chip select pin is: 10
Edit SD_CS_PIN to change the SD chip select pin.

type any character to start
init time: 10 ms

Card type: SDXC

Manufacturer ID: 0X3
OEM ID: SD
Product: SD64G
Version: 8.5
Serial number: **********
Manufacturing date: ******

cardSize: 63864.57 MB (MB = 1,000,000 bytes)
flashEraseSize: 128 blocks
eraseSingleBlock: true

OCR: 0XC0FF8000

SD Partition Table
part,boot,bgnCHS[3],type,endCHS[3],start,length
1,0X0,0XA,0X9,0X2,0X7,0XFE,0XFF,0XFF,32768,124702720
2,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
3,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
4,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0

Scanning FAT, please wait.

Volume is exFAT
sectorsPerCluster: 256
clusterCount:      486992
freeClusterCount:  486948
fatStartSector:    49152
dataStartSector:   65536

benchプロジェクト

benchプロジェクトの実行結果を以下に示します。
================================
(Sandisk SDXC microsd Ultra 64GB)
================================
write speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
4313.79,10829,116,118
4351.33,2275,116,117

read speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
4420.58,116,115,115
4420.58,116,115,115

================================
(Sandisk SDXC microsd Ultra 512GB)
================================
write speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
4343.77,6679,116,117
4358.92,2585,116,117

read speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
4416.68,116,115,115
4424.50,116,115,115

================================
(Sandisk SDXC microsd Extreme 1TB)
================================
write speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
4313.79,5754,116,118
4336.24,6617,116,117

read speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
4420.58,116,115,115
4420.58,116,115,115

自己紹介

自分の写真
電子工作&プログラミング、オーディオ・音楽

注目の投稿

Raspberry Pi Pico Wで電波時計を合わせる (JJY標準電波エミュレータ)

Raspberry Pi Pico Wのアプリケーションとして 最少の周辺部品で電波時計むけJJYエミュレータ(時刻合わせ用)を製作しました。 ※2023年6月6日: ソースコード修正の内容を反映させました。 時刻合わせ風景 概要 電波時計は電波が届くところで使...

QooQ