2023.10.6
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第86回]



●SDカードIF(6)なぜPIC18F2550なのか?

マイコン独立化システムのSDカードIFと新設計のSDカードとの最も大きな違いは2点あります。
その第一はCPUに接続するのに今まではCPUの拡張I/Oバスに直接接続する仕様だったところをCPUとはシリアル通信で接続するようにしたことです。
前者はCPUの拡張I/O回路ですが後者は独立した回路になります。
なおここで使うシリアル通信はND80Z3.5やPICBASICコンパイラボードとの通信に特化したものなので汎用のシリアル通信規格ではなくてローカルな規格になっています。
そしてもう一つの大きな違いはSDカードIFボードにDOSの機能を付加したことです。
今回のSDカードのIFにPIC18F2550を使わなければならない理由はまさにそのため(DOSの機能を付加するため)でした。
PIC18F2550の特徴のひとつにUSBIFを内蔵していることがあります。
しかし新SDカードIFボードではUSBIFは使いません。
ですからUSBIFを内蔵しているかどうかは無関係です(いや結果的に関係しているかも知れません)。
DOS機能を内蔵するためにはSDカードのセクタをREAD/WRITEするための一時的なバッファが必要です。
突き詰めれば絶対に必要なものではありませんがソフトが相当に複雑になってしまいます。
DOSの機能の最も基本的なものは特定の1セクタの値を読んでそれを一時的にバッファに保持する機能です。
これはセクタREADです。
逆にバッファのデータを特定の1セクタに書き込む機能も必要です。
それはセクタWRITEです。
1セクタは512バイトですから少なくとも連続した512バイトのメモリバッファが必要です。
そのデータバッファのほかにファイル名やそのファイルのバイト数、実際にそのデータがSDカードのどの位置に書き込まれているかなどの情報の一覧(DIR)の一部としてデータバッファとは別に少なくとも1セクタ分(512バイト)のバッファが必要です。
さらに特定のファイルのデータがSDカード上のどこのセクタからどこのセクタまでを占有しているかといった情報(FAT)を管理しているセクタのバッファも最低1セクタ分(512バイト)が必要です。
バッファだけで1.5Kバイトです。
そのほかにもいろいろなワークエリヤやワークレジスタが必要と思われますからPICに求められる機能としては大体2Kバイトのメモリがあることが必須条件になります。
そこでマイコン独立化システムのSDカードIFに使っているPIC16F883のメモリを確認してみますと。
下がPIC16F883のレジスタマップです。

[出典]Microchip Technology Inc. PIC16F883 Data Sheet

汎用レジスタは1バンク128バイトの4バンクの後ろの方のアドレスに合計96+80+80=256バイトしかありません。
これじゃあとても足りません。
PIC16Fではそれでも多いほうです。

下はPIC18F2550のレジスタマップです。

[出典]Microchip Technology Inc. PIC18F2550/4550 Data Sheet

このレジスタマップは2550でも4550でも同じです。
GPRとあるのが汎用レジスタです。
1バンクが256バイトでセクタバッファとして使えると考えられるのはBank1〜Bank6の1.5Kバイトです。
Bank0とBank7はその他の用途に使えます。
アミのかかったバンク(Bank4〜Bank7)はUSBの双方向バッファとしても使えます。
PIC18F2550や18F4550のRAM容量がこのクラスではかなり大きいのはUSBRAMを兼用していることがひとつの理由になっているのかもしれません。
USBを使わないときにはBank4〜Bank7も汎用のレジスタとして使うことができます。

機能としては28pinのPICである必要はないのですがメモリ(GPR、汎用レジスタ)を連続した512バイト×3組確保できるかどうかという点で見ると使い慣れたPIC18F2550に落ち着きます(ちょいと高いのですけれど)。

PICBASICコンパイラ[第86回]
2023.10.6upload

前へ
次へ
ホームページトップへ戻る