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


PICBASICコンパイラ

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

[第164回]



●PIC18F13K50のWRITE BUFFERは8バイトのはず?(2)

前回を書いていてその途中で突然ひらめいたのはひょっとしてPIC18F13K50のWRITE BUFFERはエンドレスのリングバッファではないか、という考えです。
リングバッファなら8バイトのWRITE BUFFERに書き込む時間がそのデータをフラッシュメモリに書き込む時間よりも短ければオーバーフローすることはありません。
一旦はそのように考えて納得したのですが。
一晩寝て翌日になってからよくよく考えてみるとやっぱりおかしい。
どうにも納得できません。

[出典]Microchip Technology Inc.PIC18F1XK50 Flash Memory Programming Specification

FIGURE 4−5にクロックパルスとともにデータを書き込む様子が示されています。
4ビットコマンド(1111)に続いてWRITE BUFFERにデータを送ったあとコマンド(0000)でそのデータをフラッシュメモリに書き込みます。
この図で見ると16ビットのデータをWRITE BUFFERに送る都度、そのデータを0000コマンドでフラッシュメモリに書き込むように思ってしまいそうですが、そうではなくてFIGURE4−4の図からおそらくWRITE BUFFERバイト分のデータをWRITE BUFFERに送ったあとSTART WRITEコマンド(0000)を発行すると解釈すべきと思われます。
ここで重要なのはProgramming Time P9とP10です。
Datasheetで確認してみるとP9=1ms、P10=100μsになっています。
P5、P5Aが40nsであることから考えるとコマンド0000のところで要求されている時間はバッファにデータを読み込む時間よりも桁違いに長いことがわかります。
ちなみにPGCの1ビットクロック時間は100nsです。
この数値から考えると前回思いついたリングバッファでは駄目ということになります。
やっぱり上に書いたように書き込みデータを一旦WRITE BUFFERに溜めてから0000コマンドでフラッシュメモリに書き込むと考えるしかありません。
ならばなぜ8バイトしかないはずのバッファなのに16バイトのデータが正しく書き込めてしまうのか?
論理的にはありえない事象です。
悪霊のしわざでありましょうか?
そうではないとすると。
考えられることはただひとつです。
DATA SHEETの記述が間違っていて本当はPIC18F13K50のWRITE BUFFERも16バイトだったとしたら?
ありえない話ではないと思います。

[出典]Microchip Technology Inc.PIC18F1XK50 DATA SHEET

TABLE1−1によるとPIC18F13K50と14K50の相違はIC CHIPに実装しているメモリ容量のみのようです。
ということは。
13K50と14K50のCPUコアは同じなのではないか?
WRITE BUFFERはおそらくCPUコアの中にある、と考えると13K50のWRITE BUFFERも16バイトであっても不思議ではありません。
DATA SHEETを作成する段階では13K50と14K50は別のCPUコアにするつもりだったものがその後のどこかの時点で同じコアを使うことになってしまったのではないか?
それはあくまで私の推論であります。
さもなければ。
悪霊のなせるワザであります。
あな、おそろしや。

PICBASICコンパイラ[第164回]
2024.11.25 upload

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