シリアルFlashメモリ(1) 
   ReadID実行でビット交換


 シリアルFlashメモリの ReadID コマンドを試してみました。
 試したシリアルFlashメモリは、マイクロチップ社の「SST25VF032B 32 Mbit SPI Serial Flash」でSPIでやり取りする物で、8Pinのパッケージに入っています。 初めて見たときは、こんなちっさい所にに32MBitも入っているのかと驚きました。

 はじめに、H8/36078のSCI3を使ってReadIDコマンドを試してみたのですがビット交換の処理時間で驚きました。

●シリアルFlashメモリ動作確認の構成の写真

 動作確認の構成写真です。基板の上が制御MCUのH8/36078、下の赤丸の処が「SST25VF032B 32 Mbit SPI Serial Flash」です。H8/36078のSCI3をクロック同期モードで通信しています。
 

 

































●ReadIDコマンドの動作を確認

 SST25VF032は、H8/36078のSCI3のクロック同期モードによるSPI方式で通信しています。
 その信号の流れは、下図の様に、1バイトのコマンドを先頭に3バイトのアドレスを送ると、IDデータが送られてきます。
 SST25VF032の直列通信は、下図の様にMSB先頭と固定されています。

 単純なSPI通信なのですが、H8/36078のSCI3はLSB先頭と固定されているので、SST25VF032と通信するにはビット交換が必要です。










●H8/36078でビット交換

 H8/36078でビット交換しました。最短のビット交換方式は、テーブル方式だろうと下の関数を作りました。
 期待する処理時間は、転送命令を2回程度で1uS以下だろうと呑気に考えていました。





●ReadIDの実行

 H8/36078でReadIDコマンドを実行したら、8バイトのやり取りしているのにロジックスコープでは先頭の2バイトしか見えません。かなり悩んだ結果、ロジックスコープのレンジ外と判りました。テーブル方式のビット交換関数が非常に時間がかかっています。

 下の写真は、送信時はビット交換関数を使い、受信時はビット交換関数を外した信号の流れです。
 「5_Sck3」はSPIのクロックで、これをロジックスコープのトリガーにしています。先頭の4バイトはコマンドとアドレスで、バイト間隔が208uSです。びっくりしました。





 下の写真は、後半の4バイト部分を拡大したものでバイト間隔は14uSです。こんなものかなと思える値です。





●ビット交換の記述をC言語とアッセンブル言語の混合表示

 ビット交換の記述をHEWのC言語とアッセンブル言語の混合モードで表示させました。
 アッセンブル言語の理解が不充分なので処理内容は判りませんが、サブルーチンを使っていろいろしています。

 対策はどうしたらいいのかな?
 困りました。







ホームへ戻る