6-15 ロジックアナライザーの作成

もくじ

6-15-1 ver.0.1 初期バージョン
6-15-2 ver.0.2  I2Cプロトコル表示バージョン
6-15-3 ver.0.4 SPIプロトコルの追加とトリガースキップ機能の追加(この章の最後にある。これが最新版。)
         スキップトリガー機能は非常に有効であるので、6-15-3章を参照されるとよい。

2013年7月:BASCOMのプログラムで、I2CプロトコルアナライザーのRepeate Start以後のデーター表示にバグがあり、プログラムを差し替えました。 6-15-3でリンクされているのがそれです。取説はver.0.4と変わりません。

FPGAやCPLDを使う場合の追加の注意:

Quartusで設計ファイルのコンパイルを更新する際の注意:この章の設計ファイル(CPLDやFPGA関係)を更新する際に新しいproject folderに、旧ファイル群をコピーして名前を変え、新しい設計フォルダーとしてコンパイルすることがある。その際、以下の点に注意。昔、Quartusでコンパイルしたオブジェクトファイル(pofやjicは昔のプロジェクトフォルダーの、それらのファイルにリンクされている。したがって、それらのオブジェクトを書き込んでも、昔の変更前のコンパイルフェイルが書き込まれるのみで、新しい設計は反映されない。故に、なぜか、新しい更新が反映されないことになる。これは、相当に筆者を悩ました。Quartusのバージョンがバグを含んでいるかと思って、種々のバージョンを試したが、全てダメ。要するに、新規のコンパイルオブジェクトの指定が昔のままだったため。書込オブジェクトの更新は、まず、書込ウィンドで書込ファイルを削除(Remove)する。その後、正しい、新しいフォルダー内の書込ファイルを"Add File”で選択し、それを書き込むことで正しく更新される。

6-15-1 Ver.1 簡易型

LogiAna

 マルチマスター型、I2Cインターフェース信号線の状態遷移を計測したいことがあり、ロジックアナライザーを自作したので紹介する。PCとUSBで接続する形式の市販品はあるのだが、たまたまDE0-nanoとカラーグラフィック液晶が、ちょっとした実験の後に使われずに余っていたので、それらを有効利用して試作した。システム全体を組み上げるには少々高度な技量がいるが、自信のある方はトライしてみるのもよいかもしれない。
 現在の設計における最大サンプリング周波数は100MHzだが、使用したFPGAの仕様上はうまく設計すれば200MHzを超えても可能のようである。また、設計を改良して2並列化して厳密にタイミングセットをしたり、外部に高速のラッチロジック回路を増設すれば500MHzまで可能かもしれない。やる気の有る方はトライしてみるとよいかもしれない。なお、筆者は100MHzで現在の要求に事足りるので,試していない。また、500MHz以上になると、プローブ方式の設定や測定装置内の配線に細心の注意が必要であり、信頼できるメーカー(テクトロ、アジレント、レクロイ等)のロジアナ以外の安い製品では筆者としては本当に測定できているかは信用できないので、インターネットで売られているような製品では本当に計測可能なのか、筆者は少し疑問に思う事もある。普通の測定では100MHz(=10ns分解能)で十分であり、無理に高速のものを使う必要は無いと思うのだが(高速のものを使うと、それなりに変なデーターが出て,困る事もある。(プロなら、そのことが分かる。))

構成:上の写真にあるようにカラー液晶パネル(共立デジットで売っているパチスロ液晶(詳細はこちらを参照)、800x480画素、16-bitカラー)、DE0-nanoボード(Cyclone-IV FPGA + 32MB SDRAM)、ATMega1284ボード(ユーザーインターフェースを担当)、FT232R USB I/F基板といったもので構成されている。シャーシの下には5V 1.5A + 12V 1Aのスイッチング電源がある。

 おおまかな仕様は以下である。
サンプリング周波数= 100MHz max、チャンネル数=4 Channel (CH)、データーメモリー=64k 点/各Channel
トリガー条件=各CH条件のOR、2CH条件のAND、4CH全てのANDなどで設定可能。なお、各CH条件のOR時に,他のCHのトリガー条件を未定義にしておけば、トリガーを定義した単一のCHのトリガー条件のみでトリガーできる。例えば、CH3のトリガー条件をRise edgeにし、他のCHのトリガー条件を未定義にしておけば、CH3でトリガーがかかる。なお、当然、トリガーがかかった後は全部のCHのデーターが取り込まれ、メモリーされる。

 上の写真では、10MHzでサンプリングし、ロジアナ自身のロータリーエンコーダーのパルス変化を計測している。下の写真にLCDパネル面のみを撮影したものを示す。(注:信号入力初段に74LCX244を使っているが、シュミットトリガ入力なので、インピーダンスの高いロータリーエンコーダーそのものを計測する場合は、発振する事がある。なお、通常のデジタルICの出力から信号を取った場合は、このようなことは起こらない。)また、未入力のチャンネルにはノイズ的に変な信号が検出される事もある。(74LCX244は入力インピーダンスが高いため。)それらのノイズについては無視されたい。

LogiAnaPanel

 表示では64k点の全てを縮小してグラフ化したものをパネルに表示している。図より、ロータリーエンコーダーのスイッチングにはグリッジ(ハザード)が存在していることが分かる。表示の縮小率を減少させ、ロータリーエンコーダーでオフセット時間を設定してその部分を拡大すると、さらに詳細を見ることができる。

 本装置のマニュアルを添付する。そこに,詳細な仕様や取説が書かれている。プロトコルアナライザー機能も拡張した新バージョンのマニュアルも添付する(さらに最新版が6-15-3にある)。(ハードは同じで,ソフト的に機能拡張。機能拡張については次節、6-15-2を参照。)改訂版のI2C プロトコルアナライザー表示の例を以下の写真に示す。図では別のAVRボードにおけるI2C通信の様子を観測している。なお、さらに機能追加(トリガースキップ機能とSPIプロトコルを増設)したver.0.4を6-15-3に示す。

LogiAnaPTC

 

 本装置のDE0-nano(FPGAボード部分)の設計資料(圧縮ファイル)を添付する。解凍するとLogiAna_FPGA_designというフォルダーができ、その中にDE0-nanoの3つのコネクターへの結線表が3つのPDFファイルで述べられている。また、同じフォルダー内にあるDE0nano_LogiAnaAndGLCDフォルダーがQuartusのプロジェクトファイルである。このフォルダーをQuartusで開くと、FPGAの設計データーを見ることができる。そのtop levelの回路図には液晶制御モジュールとロジアナモジュールの2つのマクロモジュールがあり、各々は独立並列で動作している。各モジュールをダブルクリックすれば,それらの下の構成が表示される。液晶の制御部は「グラフィック液晶の制御のページ」(リンクはここ)の第4-3-3章に述べた方式と同じものであり、そこの解説を参照されたい。フレームバッファーとしてはDE0-nanoに搭載されているSDRAMを使用する。
 もう一つのモジュールであるロジックアナライザー部分(以下、ロジアナと略記)の動作は以下である。波形の取り込み指令がAVRから/storage線をLにして来ると、ロジアナ回路はFPGA内部のSRAMに入力データーをサンプリングクロックごとに書き込む。その際、メモリーアドレスも更新されていく。トリガー条件が検出されると、そこから64k −3点だけ、メモリーに書き込み、データーストア終了を/Endn線をLにして、AVRへ通知する。トリガー条件の検出前にもメモリーにデーターをストアし続けているので、トリガーのかかる前の3CK分も残っており、トリガー検出前にどのような信号状態であったかも分かるようになっている。トリガーのかかった際のメモリーアドレスはFPGA内部にラッチされており、これをAVR側からSPIインターフェースで読み、そこから3を引いたアドレスを読み出しアドレスとしてFPGAにSPI経由でセットする。そうすると、FPGAから4ビットのパラレルラインにデーターが出るので,それをAVRが読み、蓄積されたデーターがどのようであったかが分かる。読み出しアドレスはAVRから与える/Data_RD_CKnラインをH/L/Hとすることにより,アドレスが1進み、次のデーターが読める。
 ロジアナ部におけるトリガー判定部はVerilogで書いてあるので、どのような論理かはすぐ分かると思う。
 ロジアナ部は/storage信号がHになるとリセットがかかるように設計してあるので、/storage信号を/Reset信号の代用として使う。なお、AVR側はデーター収録の終了後、メモリー内容を読み出さなければならないので、/storage信号はLのままにしておき、新たにデーター収録を行うときのみ、/storageをL/H/Lとする。(/storage線を先にL/H/Lとすると、FPGAのSRAMデーターに書き込みが起こって,データーが書き変わってしまう。)

 外部からの測定信号入力(ロジック信号入力)はDE0-nanoボードには直接入れず、バッファーICを介してDE0-nanoの13x2 headerコネクター(コネクタ−3)に入力する。この理由は、5V TTLレベルをFPGA(Cyclone-IV E)に入れるとFPGAが壊れるためである。5Vから3.3Vへレベル変換する74LCX244を使うことにより、それが回避される。回路図をPDFで添付する。これにより、5Vと3.3Vのどちらの入力信号レベルでも計測が可能となる。このバッファーボードの電源(3.3V)はDE0-nanoのコネクター3から供給される。

 AVRボード部の回路図(Eagle ソフトで作成)を圧縮ファイルで添付する。解凍後できたフォルダーがprojectフォルダーであり、このEagle projectをEagleで開けば回路図を見ることができる。AVRボードの機能は以下である。ユーザーインターフェースとしてのロータリーエンコーダーやプッシュスイッチを読み、計測パラメーターの設定やそのLCDへの表示を行う。LCDへの表示はDE0へのコマンドをSPI経由で発行して行う。それらコマンドでFPGA側はLCDのフレームバッファメモリに書き込みを行い、それがLCDに表示される。線分の描画や文字のパターン描画はFPGAにハード化されており、AVR側は対応する描画パラメーター設定と描画コマンドを発行するだけでよく、後はFPGAによって高速に描画される。(前記グラフィック液晶の制御に関するページの4-3-3章を参照)
 AVR部はユーザーインターフェースの他に、FPGAから読み込んだ波形データーの描画の前処理を行う。例えば、全波形を表示するためのデーター圧縮、表示の拡大、ある時間から表示するための時間オフセットの設定等を行う。
 加えて、SD-CardへWindowsファイルとして書き出す処理、PCへUSB経由でデーターテキストを送信する処理等もAVR部が行う。ここで使用されている74LCX125であるが、共立に無い場合は、日本橋のトーカイに行くとある。(部品の入手法のページを参照。)
 それらを行っているプログラム(BASCOM-AVRで記述)を添付する。また、プロトコルアナライザー機能等を拡張したバージョンのプログラムもこちらに添付する。(機能拡張については次節、6-15-2を参照。)詳細はそれらプログラム中にコメントで記述してあるので、それらを参照されたい。(また、前記したマニュアル類も参照。改訂版のマニュアルにプロトコルアナライザー表示の写真有り。)なお、プログラム容量はBASCOMの無料版でコンパイルできる量を超えるので,有料版が必要であるが、プログラムを読むだけなら無料版でも読める。加えて,前記に添付したマニュアルも参照。
 なお、SD-Cardは通常のSDカードの規格であり、SD-HCやそれよりも高速な方式には対応していない。そのため、ファイル書き出しに45秒ほどかかるのが、現在の問題点である。(ASCII textで書き出しているのも遅い原因。binaryにすれば速くなるが、PC側でのファイル処理が面倒になる。)

 BASCOMを使ってプログラムを書いたので,短期間で開発できた。なお、AVR部をFPGA内部にNIOS CPUをインプリメントして置き換えることも可能かと思うが、開発に時間がかかるので試していない。NIOSにすれば、必要なボードサイズはほとんどDE0-nanoのサイズ+SD-Card + USB部程度に小型化できる。(ユーザーインターフェースのスイッチ等を除く)

 その他、拡張性については前記に添付したマニュアルの最後にも書いておいたが,以下の拡張が考えられる。FPGAのLogic elementsや内蔵SRAMはけっこう余っているので、例えば、4CHを8CHに増加させるとか、メモリー容量を64k以上にするとかも可能かもしれない。また、DE0-nano上のSDRAMをうまく使えば,例えば16M サンプル点ということも可能かもしれない。(ただし、SDRAMはframe bufferとしても使用しているので,タイミング設計やSRAMを介したbuffring方式に工夫を要する。おそらく、数十MHz sampling周波数なら設計も容易。)さらに、DE0-nanoのFPGA (Cyclone-IV)は高速であるので、現在の設計下でサンプル周波数を200MHzとすることもできよう。加えて、AVRのプログラムFlash使用率は22%であり、AVR内のSRAM使用も1/4程度であるので、まだまだAVR部の機能拡張も可能である。例えば、プロトコルアナライザー機能など(添付した新規バージョンで一部はソフト的にインプリメント済み)。
 その他の拡張としては、DE0-nanoボードに搭載されているADコンバーターを使ってデジタルオシロを作成する手もあるが、そのADCはmax 200k sample/sec 程度の速度であり、2CHのオシロとすると、100k sample/sec. 以下となり、あまり速い信号は見ることができないので作る価値があるかどうか?

 その他のロジアナの実現方式としてARM CPUのみを使って作成する方法もあるが(DSO QUADがその例)、100MHzサンプリング+100MHz = 10nsでの複合的トリガー条件判定となると、ARMでは速度が間に合わない。このへんはやはりFPGAに分がある。

 最後に,電源供給ラインは次のようにしてある。もとの電源は5V 1.5A + 12V 1A程度のスイッチング電源(5Vは1Aでも可能と思う)。ここから+12VをLCDのバックライト用高圧発生部の電源としてLCD基板に供給。+5VもLCD基板のロジック電源(消費電流は数百mA程度と考えられる)に供給。その+5VはLCDにフラットケーブルでつながれたDE0-nanoのGPIO0コネクターを経由してDE0-nanoの5Vラインに給電され、DE0-nano内の3.3Vレギュレーターで3.3Vに変換される。その3.3VはDE0-nanoのGPIO1コネクターを経由してフラットケーブルを介してAVRボードに給電される。(AVR部の消費電流は数十mA程度)また、74LCX244の信号入力バッファ基板にはDE0-nanoのコネクター3から3.3Vが給電される。FT232R USB I/F基板への+5Vと+3.3V (VCCIO)の給電はAVRボードから、DE0-nanoのGPIO1コネクターから来た電源が給電される。ここで、注意として,FT232R基板で+5VラインがUSBバスパワーと結線されているものがあることである。その場合は、USBの5VとFT232Rの5Vラインはパターンカットし(または、FB1:フェライトビーズを抜いてしまう)、FT232Rのみの5VをAVR側から給電すること(そうしないと、PCのUSBの5Vラインとけんかしてしまう)。また、FT232R基板でVCCIOをFT232Rの3.3Vから取っているものがあり、その場合はそれをカットし(または,関連するジャンパーを全て抜く)、FT232RのVCCIOピンのみに3.3VをAVRボードから給電すること。(AVR側のI/O信号レベルは3.3V)
 追補:AVRボードの回路で、SD-Cardをソケットに挿入時に、非常に高い突入電流が流れて3.3Vラインが瞬間的に大きく電圧低下し、AVRがリセット状態に入ってしまうことがあった。この現象はLCフィルター回路で防げるので、そのような回路をSD-Cardの電源に付けておく必要がある。前述に添付したEagleによる回路図はそのような改造をしたものに差し替えた。

6-15-2 機能拡張 ver.0.23

 I2C プロトコルアナライザーと波形比較を拡張したバージョンを以下に示す。
FPGA部のハードウエアは6-15-1と同じで基本部の仕様は同等である。異なるのはAVR側の処理ソフトのみ。それを添付する。また、ver.0.23の取説を添付する。

 Ver.0.23では以下の機能を拡張。(以下の写真ではver.0.22となっているが、仕様拡張の途上である写真を兼用。)

1. SD-Cardにメモリーしたデーターを現データーの下に高さが小さい波形で出力することにより、波形の比較ができるようにした。以下にその写真を示す。画像を見ると分かるように、Mode-1でSD-Cardにbinary-formatでセーブされたデーターと現在のデーターを比較できるようにした。高さが低く各チャンネルの下にあるのが、各チャンネルの比較データー。

w_comp

2. I2Cプロトコルを表示できるようにした。
 以下、その写真を示す。波形最上部の小さな文字で、S= Start, P = Stop, A=アドレス+R/W= read/write, D=データー などが表示されている。

p_anal 

 以上のように、I2Cプロトコルの状態が画面に表示されるようになっている。(注:十分高速なサンプリング周波数を使用しないとプロトコルが誤って表示される事がある。また、縮小表示でもそれが起きる事がある。)

以下にこれを行っているBASCOM-AVRソフトを添付する。6-15-1よりは処理が多いので、プログラム容量は多いが、Mega1284は多くのプログラム用Flashメモリーを持っているので,これでも容量は30%ほどである。難点は、場合によって(Mag=50以上の場合)少し処理速度が遅くなることである。なお、データー処理をするCPUにARMを使えば、実用速度に達すると思われる。または、FPGA内にNIOSか?
また、Mega1284でも、比較用のデーターバッファーにSD-Cardのバイナリーファイル読み出しの代わりに、SPI -I/FのSRAMであるMicrochip社23LC1024(1024-bit = 128kB)を増設し、それにストアーしたデーターを使うと十分に高速化できると思う。(SRAMの/CSはLED用のポートまたはXCKポートを割当し、SCK, MOSI, MISOはそのままSPI-SRAMに接続すると良い。)

 

6-15-3 機能拡張 ver.0.4

 SPI プロトコルアナライザーとトリガースキップ機能を追加したバージョンを以下に示す。なお、液晶表示は前のバージョンとほとんど同じなので、写真はなし。
ハードウエアは6-15-1と同じで基本部の仕様は同等である。異なるのはFPGA設計データーとAVR側の処理ソフト。
 FPGAの設計データーを圧縮ファイルで添付する。
(FPGA部のみ添付するので、結線等の資料は前章の資料を参照。)。
BASCOMによるソースを添付する。
また、ver.0.4の取説をPDFで添付する。

 Ver.0.4では以下の機能を拡張。

1. トリガー条件にCH0 & CH1 を追加。
2. SPIプロトコル表示を追加。
3. トリガースキップ機能を追加。

上記の詳細は上記に添付したver.0.4の取説を参照。
特に、新規追加のトリガースキップはロジアナに付属していると非常に便利な機能である。詳細は取説や設計データーを参照されたい。以下にトリガースキップの概要とその必要性についてを述べる。

LogiAna_SPIM

 上の写真ではMega168ボードからのSPI インターフェース信号をロジックアナライザーで取得している例。このロジアナは4チャンネルの入力があるので、ちょうどSPIにも対応できる。ロジアナのトリガーは/SS信号の立ち下がりでかければよい。AVR側のプログラムはEpsonの液晶コントローラであるS1D1378をSPI接続で制御するプログラムが書かれており、数多くのSPI信号をやり取りすることになっている。(注:十分高速なサンプリング周波数を使用しないとプロトコルが誤って表示される事がある。また、縮小表示でもそれが起きる事がある。不明なプロトコルは表示されないか、または、Xと表示される。)
 このようなプログラムによるSPI通信の場合、ある程度、最初の部分を飛ばして、後のSPI通信がどのようになされているか知りたい必要があって、トリガースキップ機能をFPGA上に実装した。(FPGAの設計変更のみで済み、ハード変更が起こらないので便利。)
 さらに、AVRをリセット時には一時的に/SS信号がLになることがあり、その場合に間違ったトリガーによってロジアナがスタートしてしまい、観測したいデーターが表示できない。

LogiAna_SPIS0

 上記の写真がその例であり、写真右下にある緑色の文字にはS=0と記載されており、トリガースキップカウント=0、すなわち、スキップ無しですぐにトリガーという設定になっている。写真のデーターはAVRのリセットスイッチを押した後にトリガー取得されたデーターであり、何も有効なデーターを取得できていない。これは、AVRがリセット後に瞬間的に/SSラインをLに下げてしまったためであり、これをスキップしない事には実際のSPI通信データーを見る事ができない。
 この写真では/SSをCH0に入力し、立ち下がりエッジでトリガー。赤いデーター表示は、0.0usで一旦、短時間ではあるが下がり、またすぐに上がっている。CH1=SCK, CH2=MOSI, CH3=MISOで全て22k ohmで3.3Vにプルアップされている。

 このような、CPUに特有のハード的に避けられない疑似トリガーを回避するためにもトリガースキップ機能が有用である。このような現象に対しては、単にロジアナのメモリー容量を増やすだけでは対応できない。例えば、サンプリング周波数=50MHz、疑似トリガー以後に100msもSPIのスタートがかかる場合などには、そうとうにロジアナのメモリー容量が大きくても、とっくに搭載メモリー容量をオーバーしたところまで行ってしまい、取得したい真の信号は取り逃がしてしまう。また、メモリー内に入っていても探すのが大変か、検出時間を取られ、その他は不要なデーターだけが無用にメモリーに入っているということになる。

LogiAna_SPIS1

 上の写真はトリガースキップカウント=1として、トリガーを1個スキップしてからトリガーをかけてデーターを取得した例である。こうすることにより、真のSPIインターフェースのやり取りを取得する事ができる。また、すぐに最初から欲しいデーターが表示される。写真ではSPIのプロトコルアナライザー機能をイネーブルしてあるので、そのデーターが8SCKおきに表示されている。(写真が少しピンぼけですいません。実際は、はっきりと読み取れます。)
 スキップカウントの設定値は4095まで設定可能であり、そうとう後までのSPI信号のやり取りまで取得する事ができる。AVRへ書き込んだプログラムの内容は分かっているので、どこまでスキップしたら良いかは既知である。(または、分からない場合はスキップカウントを1づつ増していけば良い。そこでトリガーがかかれば、表示の最初の部分にそれが表示される。)別のトリガー方法としてSCKの立ち上がりでトリガーをかけ、8の倍数でトリガースキップをかける方法もある。SPIのバースト転送などで使用すると良い。(現在はskip max = 4095だが、FPGAの設計を変え(AVRからFPGAへの制御データーSPI通信を32+8 = 40bitとか)、AVRのプログラムも対応して変えれば、もっと多くできる(2^20 -1)。DE0-nanoのFPGAのLE占有率はまだ17%である。)

 以下の写真の例はスキップカウント=26として計測した例である。リセット時の疑似トリガーが1つあるので、プログラム上は25回目のSPI通信に相当する。

LogaAna_SPIS26

 写真ではEpsonの液晶コントローラの多数ある制御レジスター(アドレス=060882)に対する制御データー(0003)の書き込みが表示されている。(これを書き込んだプログラムのソースと比較すれば、バグやハードエラーなどを見つける事ができる。)

 以上のようにトリガースキップは非常に便利な機能である。この機能はFPGA上にハード的に実装されているために、3サンプリングクロック区間で判別される。すなわち、もし現バージョンにおける最速200MHzのサンプリングクロックの場合は次のトリガー識別までの時間間隔は5ns x 3 = 15nsと非常に高速になされる点も、もう一つの特徴である。
 当然、この機能は他のプロトコル解析モードや複合トリガー設定に対しても有効である。さらに、将来的にFPGA設計データーの書き換えで任意に拡張可能である。(例:現在の3クロックスキップ判定を2クロックに短縮するなども。(少しVerilogを複雑にいじることになるが。))
 現在の最速サンプリング周波数は200MHzであるが、インターリーブ機能をFPGA上に実装すれば、その段数N によって200 x N MHzまで高速化できるが、現在は入力段である74LCX244のスピードや、その他、終端の問題、および、実用上の問題でそこまでいらないので、実装していない。また、スキップトリガー機能を実装した効果で、メモリー容量の増加も必要なくなり、例えば、DE0-nano上のSDRAMを166MHzで使ってバッファリングする等の工夫も、当面、不要となった。

 

p.s. ver.0.4のFPGA設計データーのコンパイルはQuartus v,11 SP1で行った。解凍後のフォルダーにあるコンパイル&ファイルタイプ変換済みのoutput.jicをDE0-Nanoに書き込めばよい。なお、Quartus v.12 SP0でコンパイルして書き込んだところ、うまく機能が発現されなかった。たまたま、そのとき開発していたソースが悪かったのか、ソースがQuartus v.12 SP0に合致していなかったのかは不明。従って、うまく機能が発現されなかった場合は、ver.11 SP1でコンパイルや書き込みをしてください。
(元々のソースはQuartus v.9で基本部を作ってから移植。なお、一旦v.11以降でそれを開くと、v.9では開けなくなるので、コピーをとっておく事。v.9の方がMegaWizerdが使いやすいので、そこでモジュールを作って、関連ファイルをv,11以降にコピーしたりしている。また、シミュレーションもv.9の方が慣れているので。)

追加記事:Mega1284を制御ボードとして、SPI インターフェースを使う場合、BASCOM ではConfig SPI 命令に不具合が有るので注意(必ずしも全てBASCOMのせいでもない)。ただし、Config SPIとやってから、SPIinitを発行するまでのプログラム行記述の間隔に依存した不具合みたいなものが見られた。詳細は上位ページの自作電子回路の7-0章(BASCOMのくせや問題点)の項目(6)を参照。

回路のTop Pageへ