Pic24MC68Kマイコン(その6)プリント基板で動作OK [68K]
前回の記事から時間が経ってしまいましたが、元旦に製造依頼したプリント基板はとっくに届いているので部品を実装してみました。
ブレッドボードで確認した回路なのでいつものようにすぐ動くと思っていましたが今回は PIC24 の OneBitLoader すらまともに動かず、原因調査&対処して無事動くようになりましたので調査内容や対処などについてメモとして記録しておきたいと思います。
最初に Pickit で PIC24 に OneBitLoader を書き込んで起動してみました。
通常であれば"Welcome" メッセージを表示後に、押されたキーを表示するのですが、下図のように文字化けが酷い状態でした。
文字化けの状態は安定せず、変化するようなのですが、'1'(0x31)の入力が'q'(0x71)に化けたりするのでシリアル通信のクロックが少しずれているようです。
原因が USB/シリアルI/Fの PL2303 と PIC のどちらなのか切り分けるためにまずは PIC のシリアル受信と送信部の信号を確認しました。
下図が PIC 側の受信信号例ですが、マーカー間が3bit分で 37.86(=12.62 x 3)Kbpsで通信速度は 38400bps なので許容範囲内です。信号自体もエッジの鈍り等は無く問題無いようです。
下図が PIC の送信信号波形例でマーカー部の 1bit 分が 41.29KHz で設定値(38400bps)より結構高めの値です。これで PIC 側が問題の原因であることが判明しました。
念のためにロジアナでも確認しましたが、受信側はokですが、送信側はバケバケでした。
問題個所が特定できたので PIC24 を交換する必要がありますが、ヒートガンでは近くの SDコネクタなどが影響を受けそうだったので、PIC のピンを切断してからピンを半田ごてで取り外しました。
しかし、PIC を外す時に 43 番ピンのパターンが逝ってしまいましたorz
このピンは D05(データバス)で接続先は基板の淵の方にあり距離があるので、直ぐ近くのスルホール部のレジストを剥がし、そこに半田付けするという難易度C? の技を試みてみましたw(クリックで拡大写真になります)
ジャンパー部はアルコール洗浄後に保護のためにホットボンドで固めました。PIC を交換した結果、PIC で OneBitLoader が動き、自作の picleコンパイラ環境も問題無く導入できて、68K の動作試験プログラムである Hello 表示もできました(^^)/
勿論、前回の記事で書いたS-record ローダーも動きました。
更にうれしいことに、蟻さんから 5個組で買った MC68HC000P16 が最近届いたのですが、今回はいろんなものが混在していて、アルコールで拭くと P8(8MHzバージョン)に変身するものもありましたが、なんと 16MHz で動くものを1個見つけました(^^)/
動作するようになった状態での写真等を貼っておきます。下の写真は 68K を実装前の TOP面です。
次にボトム面です。
MC68K 実装後は下の写真のようになります。アルコールで拭いて刻印が薄くなっているので刻印が見えるように斜めからストロボを当てています。
下の写真はUSBケーブルを接続して動作確認をしている様子で今までのブレッドボードよりはるかにコンパクトになっています。
最後にreset直後から、68K の動作確認試験である "Hello" 表示のプログラムを実行した際のログを貼っておきます。68K は 16MHz で動作しています。あれ picle の起動メッセージが86のままになっていますねw
[TOP] [ 前へ ] 連載記事 [ 次へ ]
ブレッドボードで確認した回路なのでいつものようにすぐ動くと思っていましたが今回は PIC24 の OneBitLoader すらまともに動かず、原因調査&対処して無事動くようになりましたので調査内容や対処などについてメモとして記録しておきたいと思います。
最初に Pickit で PIC24 に OneBitLoader を書き込んで起動してみました。
通常であれば"Welcome" メッセージを表示後に、押されたキーを表示するのですが、下図のように文字化けが酷い状態でした。
OneBitLoader 起動時の文字化けの様子 |
|
文字化けの状態は安定せず、変化するようなのですが、'1'(0x31)の入力が'q'(0x71)に化けたりするのでシリアル通信のクロックが少しずれているようです。
原因が USB/シリアルI/Fの PL2303 と PIC のどちらなのか切り分けるためにまずは PIC のシリアル受信と送信部の信号を確認しました。
下図が PIC 側の受信信号例ですが、マーカー間が3bit分で 37.86(=12.62 x 3)Kbpsで通信速度は 38400bps なので許容範囲内です。信号自体もエッジの鈍り等は無く問題無いようです。
PIC 受信時のシリアル波形例(0x31受信時) |
|
下図が PIC の送信信号波形例でマーカー部の 1bit 分が 41.29KHz で設定値(38400bps)より結構高めの値です。これで PIC 側が問題の原因であることが判明しました。
PIC 送信時のシリアル波形例 |
|
念のためにロジアナでも確認しましたが、受信側はokですが、送信側はバケバケでした。
PIC 送受信のロジアナ波形例 |
|
問題個所が特定できたので PIC24 を交換する必要がありますが、ヒートガンでは近くの SDコネクタなどが影響を受けそうだったので、PIC のピンを切断してからピンを半田ごてで取り外しました。
しかし、PIC を外す時に 43 番ピンのパターンが逝ってしまいましたorz
このピンは D05(データバス)で接続先は基板の淵の方にあり距離があるので、直ぐ近くのスルホール部のレジストを剥がし、そこに半田付けするという難易度C? の技を試みてみましたw(クリックで拡大写真になります)
PIC43 番ピンのジャンパー接続 |
|
ジャンパー部はアルコール洗浄後に保護のためにホットボンドで固めました。PIC を交換した結果、PIC で OneBitLoader が動き、自作の picleコンパイラ環境も問題無く導入できて、68K の動作試験プログラムである Hello 表示もできました(^^)/
勿論、前回の記事で書いたS-record ローダーも動きました。
更にうれしいことに、蟻さんから 5個組で買った MC68HC000P16 が最近届いたのですが、今回はいろんなものが混在していて、アルコールで拭くと P8(8MHzバージョン)に変身するものもありましたが、なんと 16MHz で動くものを1個見つけました(^^)/
動作するようになった状態での写真等を貼っておきます。下の写真は 68K を実装前の TOP面です。
Pic24MC68K トップ面(MC68K実装前) |
|
次にボトム面です。
Pic24MC68K ボトム面 |
|
MC68K 実装後は下の写真のようになります。アルコールで拭いて刻印が薄くなっているので刻印が見えるように斜めからストロボを当てています。
Pic24MC68K トップ面 |
|
下の写真はUSBケーブルを接続して動作確認をしている様子で今までのブレッドボードよりはるかにコンパクトになっています。
動作試験中のPic24MC68K |
|
最後にreset直後から、68K の動作確認試験である "Hello" 表示のプログラムを実行した際のログを貼っておきます。68K は 16MHz で動作しています。あれ picle の起動メッセージが86のままになっていますねw
68K 試験のHello表示の実行状況 |
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
Pic24MC68Kマイコン(その5)S-record ローダーの制作 [68K]
前回の記事で書いたように PIC と MC68K のインターフェース動作が確認できたので MC68K 側のメモリにプログラムをダウンロードするためのモトローラ S-record フォーマットファイルのダウンローダーを準備します。
今回は「3チップ構成68Kマイコンの構想(その3)Sレコード簡易ローダーの製作」の記事で書いた、以前 68008 環境で行ったことを 68000 環境に合わせて変更するだけなので既にある道を歩いているようなものです。
まずは MC68K 側のプログラムですが、PIC とのインターフェース部分等を若干変更しました。アセンブル環境は EASy68K を使っています。
試験用のダウンロード対象のデータは次のような簡略なものにしました。実行コードではないので冒頭の"start"ラベルは不要なのですが、END ステートメントの後にラベルを書かないと warning が表示されるのでその回避用です。
アセンブルした結果、出力された S-record ファイルの内容が下記になります。
PIC 側のプログラムと実行結果が下記になります。PIC 側のプログラムには上記の MC68K のプログラムのアセンブル結果内容を変換して貼り付けています。プログラム起動後Teratermで S-record ファイルの内容をコピペ操作をしています。S-record ローダーは1レコード毎にレコードタイプを出力するようにしています(末尾の"111"部分)。
問題無くダウンロードされているか簡易的に作ったメモリダンププログラムでメモリの内容を確かめてみます。PIC 側のメモリアドレスは MC68K の 1/2 なので、0x0100 からダンプすれば確かめられるはずです。
末尾のダンプリストを見ると問題無くダウンロードされているみたいですね。
次はいよいよ CP/M-68K の移植ですね。でもその前にブレッドボードに SDコネクタを付けないと・・w
[TOP] [ 前へ ] 連載記事 [ 次へ ]
今回は「3チップ構成68Kマイコンの構想(その3)Sレコード簡易ローダーの製作」の記事で書いた、以前 68008 環境で行ったことを 68000 環境に合わせて変更するだけなので既にある道を歩いているようなものです。
まずは MC68K 側のプログラムですが、PIC とのインターフェース部分等を若干変更しました。アセンブル環境は EASy68K を使っています。
S-record ローダーの MC68K側プログラム(アセンブラ) |
|
試験用のダウンロード対象のデータは次のような簡略なものにしました。実行コードではないので冒頭の"start"ラベルは不要なのですが、END ステートメントの後にラベルを書かないと warning が表示されるのでその回避用です。
S-record ローダーの試験用データ(アセンブラ) |
|
アセンブルした結果、出力された S-record ファイルの内容が下記になります。
アセンブルして出力された S-record データ |
---|
S021000036384B50524F47202020323043524541544544204259204541535936384B6D S1230200000102030405060708090A0B0C0D0E0F30313233343536373839414243444546C0 S12302200123123423453456456756786789789A00000000000000000000000000000000E2 S113024000000000000000000000000000000000AA S804000200F9 |
PIC 側のプログラムと実行結果が下記になります。PIC 側のプログラムには上記の MC68K のプログラムのアセンブル結果内容を変換して貼り付けています。プログラム起動後Teratermで S-record ファイルの内容をコピペ操作をしています。S-record ローダーは1レコード毎にレコードタイプを出力するようにしています(末尾の"111"部分)。
S-record ローダーのプログラムリストと実行結果(picle言語) |
|
問題無くダウンロードされているか簡易的に作ったメモリダンププログラムでメモリの内容を確かめてみます。PIC 側のメモリアドレスは MC68K の 1/2 なので、0x0100 からダンプすれば確かめられるはずです。
末尾のダンプリストを見ると問題無くダウンロードされているみたいですね。
簡易メモリダンププログラムでダウンロード結果の確認(picle言語) |
|
次はいよいよ CP/M-68K の移植ですね。でもその前にブレッドボードに SDコネクタを付けないと・・w
[TOP] [ 前へ ] 連載記事 [ 次へ ]
Pic24MC68Kマイコン(その4)PICとMC68Kのインターフェース処理 [68K]
前回の記事で書いたようにブレッドボード上で MC68K が漸く動くようになったので今回はPCとのインターフェース部分の動作確認について書いてみます。
基本的には以前 68008でやったことを踏襲しますが、メモリアクセス用のデータバスが16bitになったことで3番目にあった文字出力時の出力データ(CoData)を機能番号(FuncNo)の次に移動して MC68K から1回のアクセスで設定できるように変更しました。
アセンブラ環境は EASy68 の EDIT68K を使っています。アセンブラが出力するSフォーマットファイルをバイナリ変更後に自作の bin2state ツールで picleソース内に貼れる形式に変換しています。
今回の環境では MC68K 自体はビッグエンディアンですがPIC内処理はリトルエンディアンです。更にPICのPMP機能でメモリアクセスする際はビッグエンディアンになり、かつアドレス値は MS68K の 1/2 と言うややこしい状態になっています。
試験プログラムを実行してみると出力文字列を最後まで出し切らないうちに暴走して HALT してしまう状態でした。
ロジアナで動作を追ってみると MC68K のメモリ書込み処理(スタックへのリターン値書込み)が最初の内は問題無いのですが時間が経つと上手くいかなくなるようで一文字出力処理からのリターンで予期せぬアドレスに飛んでいるようです。
今回実施したことを全て書くと雑多なメモになってしまうので主要な確認事項と対策を以下に列挙します。
参考に東芝の「LogicIC_ HC_Series Application Note 2021-01-31」から引用した74HCシリーズの入出力電圧の規格を貼っておきます。
下図で赤丸印の部分が2個のPMWR/信号が結合してしまっている箇所です。
PMWR/のプルアップ抵抗を10Kから1Kに変更後のロジアナ波形が下図になります。1Kは小さ過ぎるような気もしますが動作上は問題無くなりました。試しにメモリチップを交換してみましたが状況は変わりませんでした。
ライト信号の幅が細すぎてマージンが少ないのでPMPの TimerM の設定を1から2に変更しました。変更後のロジアナ波形が下図で PMWR/ の信号幅がもともとの 80ns から 160ns 程度に増加しました。
参考に MC68K が動作中のロジアナ波形も貼っておきます。
BR/(バスリクエスト)がhighの部分が MC68K が動作している部分で、MC68K はPICへサービス要求(今回の場合1文字出力)を依頼する場合は RESET命令を実行することで RESET/ 信号を一定時間 low にします。
PIC側は RESET/ 信号を監視していてlowを検出するとバスリクエストして MC68K の要求内容を処理します。
最後に今回使用したメモリ試験プログラムと実行結果を貼っておきます。
末尾でダンプ表示後にある "hello, world" が冒頭で書いた MC68K のプログラムの要求に従って PIC が出力した文字列になります。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
基本的には以前 68008でやったことを踏襲しますが、メモリアクセス用のデータバスが16bitになったことで3番目にあった文字出力時の出力データ(CoData)を機能番号(FuncNo)の次に移動して MC68K から1回のアクセスで設定できるように変更しました。
アセンブラ環境は EASy68 の EDIT68K を使っています。アセンブラが出力するSフォーマットファイルをバイナリ変更後に自作の bin2state ツールで picleソース内に貼れる形式に変換しています。
PICとのインターフェース試験用のMC68K側のhello出力処理(アセンブラ) |
|
今回の環境では MC68K 自体はビッグエンディアンですがPIC内処理はリトルエンディアンです。更にPICのPMP機能でメモリアクセスする際はビッグエンディアンになり、かつアドレス値は MS68K の 1/2 と言うややこしい状態になっています。
試験プログラムを実行してみると出力文字列を最後まで出し切らないうちに暴走して HALT してしまう状態でした。
ロジアナで動作を追ってみると MC68K のメモリ書込み処理(スタックへのリターン値書込み)が最初の内は問題無いのですが時間が経つと上手くいかなくなるようで一文字出力処理からのリターンで予期せぬアドレスに飛んでいるようです。
今回実施したことを全て書くと雑多なメモになってしまうので主要な確認事項と対策を以下に列挙します。
- PIC側PMPのPMWR/信号の設定
5V系のICに接続するにも関わらず、オープンドレイン設定になっていませんでした^^;
74HC に対して highレベルが 3V 程度では厳しいです Fig.1
設定をオープンドレインに変更しました
- PMWR/のプルアップ抵抗
10Kでプルアップしていましたが、ロジアナで観察するとメモリ書込み時にhighレベルに上がりきれない部分が見つかりました Fig.2
プルアップ抵抗を1Kに変更して動作が良くなりました Fig.3(2.7KではNGでした)
- PMPのTimerMの設定
PMWR/信号幅がが80ns程度で短すぎるので PMP の TimerM の値を1から2に変更しまた
変更後のPMWR/の信号幅は160ns程度になりました Fig4
参考に東芝の「LogicIC_ HC_Series Application Note 2021-01-31」から引用した74HCシリーズの入出力電圧の規格を貼っておきます。
Fig.1 74HCシリーズのスレッショルド |
|
下図で赤丸印の部分が2個のPMWR/信号が結合してしまっている箇所です。
Fig.2 PICのメモリライト(PMWR/のプルアップ10K)[sampling:25MHz] |
|
PMWR/のプルアップ抵抗を10Kから1Kに変更後のロジアナ波形が下図になります。1Kは小さ過ぎるような気もしますが動作上は問題無くなりました。試しにメモリチップを交換してみましたが状況は変わりませんでした。
Fig.3 PICのメモリライト(PMWR/のプルアップ1K)[sampling:25MHz] |
|
ライト信号の幅が細すぎてマージンが少ないのでPMPの TimerM の設定を1から2に変更しました。変更後のロジアナ波形が下図で PMWR/ の信号幅がもともとの 80ns から 160ns 程度に増加しました。
Fig.4 PICのメモリライト(TimerMを2に変更後)[sampling:25MHz] |
|
参考に MC68K が動作中のロジアナ波形も貼っておきます。
BR/(バスリクエスト)がhighの部分が MC68K が動作している部分で、MC68K はPICへサービス要求(今回の場合1文字出力)を依頼する場合は RESET命令を実行することで RESET/ 信号を一定時間 low にします。
PIC側は RESET/ 信号を監視していてlowを検出するとバスリクエストして MC68K の要求内容を処理します。
Fig.5 MC68K と PIC の処理実行部のロジアナ波形 [sampling:25MHz] |
|
最後に今回使用したメモリ試験プログラムと実行結果を貼っておきます。
末尾でダンプ表示後にある "hello, world" が冒頭で書いた MC68K のプログラムの要求に従って PIC が出力した文字列になります。
PICとのインターフェース試験用のMC68K側のhello出力処理(picle言語) |
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
Pic24MC68Kマイコン(その3)68Kからのメモリアクセス [68K]
前回の記事で書いたようにPICからのメモリアクセス動作は問題無いようなのですが、MC68K がうまく動かない状態だったので調べてみた結果等を書いてみます。
始めに評価環境についてですが、下の写真はブレッドボードで評価中の MC68K で1枚のブレッドボードの大半を占有していて幅広なので配線を挿す場所が上下ともに1列しかないのでロジアナが繋ぎ辛いですw
前回の記事でも書いた 元の刻印(だと思いたい)を消さずに16MHzにクロックアップした型名を刻印している主張の強いまがい品を使っていますが、後述のように少なくとも 8MHz では動くようです。
★追記 2021/12/22 {
16MHz で動かしてみた際のロジアナ画面が下図になります。
もしかしたら選別品で16Mhzでも動作するのでは?・・という一縷の望みを持っていましたが世の中そう甘くはありませんでした。16MHzでは謎の動作をしてだんまり後、HALTしました。
}
話を MC68K からのメモリアクセス確認に戻します。
PIC からのアドレス線は下図のように A10 が最上位アドレスで オープンドレイン出力し、+5V でプルアップしています。
更に A11 ~ A18 を 抵抗を介して A10 に接続しています。こうすることで MC68K がリセット後にアクセスする0番からのスタックとPCの初期値及びCP/M-68KのBIOSで使用予定の PIC と MC68K のパラメータ渡し用の実装メモリ末尾の領域を PIC 側からアクセス可能にしています。
実装しているメモリチップは 512K x 16bit なのでアドレス線は A0 - A18 の19本あります。
メモリ上に設定するPCの初期値をPIC側の 0400H に相当する 07F40H に設定して動かしてみましたが MC68K が暴走する状態でした(MC68Kへの供給クロックは 8MHz)。
そこでメモリ後半への切り替えを考えなくてもいいように PC初期値を 0008H にしてプログラムコードを 0008H 以降に設定した上で実行状態をロジアナで観察すると 0003H の PC の下位ワードを読込んだ後に、そのまま 0004H から実行しているようなので PCの初期値を 0010H に変更することでうまく動きました。
MC68K から出ているアドレス線は A1 - A22 でA0が無く、A0の情報は上位/下位バイトを指定する LB#/UB# に置き換わっているのです。つまり MC68K のアドレスは バイト単位で振られているということです。
PIC側は ワード(2バイト)単位でアドレスが振られるのでPIC側のアドレスを2倍すると MC68K のアドレスに対応するようになるということです。
従って、PIC側と MC68K 側とのメモリアドレスの対応は下表のようになります。
開始アドレスを 0010H にした場合のロジアナ波形を貼っておきます。
HALT/信号が highレベルになっている箇所が MC68Kが動作している部分で、拡大したものが下図になります。RESET/がlowレベルになっている部分は MC68K が RESET 命令を実行したことにより発生したものです(立ち上がり部分が画面に入っていませんが lowの時間は15.64us)
実行した試験プログラムと実行結果は下記の通りで、最後の方にある実行後のメモリダンプを見ると 0010H が MC68Kにより想定通り 1234H に書き換えられていることが判ります。
メモリ前半での動作が上手くいったので、最初にやりたかったメモリ後半での MC68K のメモリライト試験を行った際のロジアナ波形と操作ログを貼っておきます。
こちらも結果は想定通りで、okでした。
次回はいよいよ PIC と MC68K とのインターフェース処理の動作確認ですね。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
始めに評価環境についてですが、下の写真はブレッドボードで評価中の MC68K で1枚のブレッドボードの大半を占有していて幅広なので配線を挿す場所が上下ともに1列しかないのでロジアナが繋ぎ辛いですw
前回の記事でも書いた 元の刻印(だと思いたい)を消さずに16MHzにクロックアップした型名を刻印している主張の強いまがい品を使っていますが、後述のように少なくとも 8MHz では動くようです。
ブレッドボード上の MC68K |
|
★追記 2021/12/22 {
16MHz で動かしてみた際のロジアナ画面が下図になります。
もしかしたら選別品で16Mhzでも動作するのでは?・・という一縷の望みを持っていましたが世の中そう甘くはありませんでした。16MHzでは謎の動作をしてだんまり後、HALTしました。
偽16MHz版 MC68HC000 の16MHz動作試験結果 |
|
話を MC68K からのメモリアクセス確認に戻します。
PIC からのアドレス線は下図のように A10 が最上位アドレスで オープンドレイン出力し、+5V でプルアップしています。
更に A11 ~ A18 を 抵抗を介して A10 に接続しています。こうすることで MC68K がリセット後にアクセスする0番からのスタックとPCの初期値及びCP/M-68KのBIOSで使用予定の PIC と MC68K のパラメータ渡し用の実装メモリ末尾の領域を PIC 側からアクセス可能にしています。
実装しているメモリチップは 512K x 16bit なのでアドレス線は A0 - A18 の19本あります。
PIC側のアドレス生成回路 |
|
メモリ上に設定するPCの初期値をPIC側の 0400H に相当する 07F40H に設定して動かしてみましたが MC68K が暴走する状態でした(MC68Kへの供給クロックは 8MHz)。
そこでメモリ後半への切り替えを考えなくてもいいように PC初期値を 0008H にしてプログラムコードを 0008H 以降に設定した上で実行状態をロジアナで観察すると 0003H の PC の下位ワードを読込んだ後に、そのまま 0004H から実行しているようなので PCの初期値を 0010H に変更することでうまく動きました。
MC68K から出ているアドレス線は A1 - A22 でA0が無く、A0の情報は上位/下位バイトを指定する LB#/UB# に置き換わっているのです。つまり MC68K のアドレスは バイト単位で振られているということです。
PIC側は ワード(2バイト)単位でアドレスが振られるのでPIC側のアドレスを2倍すると MC68K のアドレスに対応するようになるということです。
従って、PIC側と MC68K 側とのメモリアドレスの対応は下表のようになります。
PIC | MC68K |
---|---|
0000 - 03FF | 000000 - 0007FF |
0400 - 07FF | 0FF800 - 0FFFFF |
開始アドレスを 0010H にした場合のロジアナ波形を貼っておきます。
00000010Hから開始した際の全体波形(サンプリング:25MHz) |
|
HALT/信号が highレベルになっている箇所が MC68Kが動作している部分で、拡大したものが下図になります。RESET/がlowレベルになっている部分は MC68K が RESET 命令を実行したことにより発生したものです(立ち上がり部分が画面に入っていませんが lowの時間は15.64us)
MC68K動作部の拡大波形(サンプリング:25MHz) |
|
実行した試験プログラムと実行結果は下記の通りで、最後の方にある実行後のメモリダンプを見ると 0010H が MC68Kにより想定通り 1234H に書き換えられていることが判ります。
MC68Kが0010H開始アドレスの試験プログラムと実行結果(picle言語) |
|
メモリ前半での動作が上手くいったので、最初にやりたかったメモリ後半での MC68K のメモリライト試験を行った際のロジアナ波形と操作ログを貼っておきます。
こちらも結果は想定通りで、okでした。
000ff800Hから開始した際の全体波形(サンプリング:25MHz) |
|
MC68Kが0010H開始アドレスの試験プログラムと実行結果(picle言語) |
|
次回はいよいよ PIC と MC68K とのインターフェース処理の動作確認ですね。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
Pic24MC68Kマイコン(その2)PICからのメモリアクセス [68K]
最初に通販ネタですが、今回使用予定のメモリAS6C8016(512Kx16bit)は通販での偽物に対するリスクヘッジで二つの店舗から2個ずつ購入しています。
yahooニュースの見分け困難!半導体の『模倣品』流通…真贋判定会社は大忙し「約3割が模倣品の懸念」を見ると外観で偽物チップを見分ける上で一番重要視されるのがインデックスマークの有無(偽物は表面を削るのでマークが消える)だそうです。
下の写真は今回購入したメモリです。確認のためにそれぞれの店舗から購入したチップを並べて比較してみるとDIP変換基板に半田付けした方はインデックスマークが・・・無いorz
ハードディバッグ時に偽チップの可能性まで考えるのは効率が悪いのでブレッドボード上のメモリを早々にインデックスマーク有りのチップに変えました。
また、CPU本体の MC68HC000P16 も千円以下の安価な物を幾つか海外の通販で購入していますが、最近届いたものが下の写真のように元の刻印を消しもしないである意味正々堂々としたまがい品でしたw
元の刻印のようにP12であれば私の所有しているDIPのMC68HCの中では最高速度かもしれないのでまだいいのですが "P12" も偽刻印で実は・・ってことにならないか不安です。
今回も前回の記事と同様に通販での偽物ネタから入ってしまいましたが、本題のPICからのメモリアクセスの検証結果についてメモを残しておきたいと思います。
始めにPICから供給する68K用のクロックの確認からです。PICからは16MHzと8MHzを供給して68Kのクロックをどちらにするかジャンパーピンで切り替えられるようにする予定です。
下図がロジアナで確認した結果で、ロジアナのサンプリングとの関係でピッタリの数値ではないですが想定通り出ているようです。
PICからのメモリリードとライト時のロジアナ波形が下図になります。PICのパラレルマスタポート(PMP)モジュールのマスターモードを使用してアクセスしています。ウエイトのパラメータ設定はアクセス時の前段/中段/後段の3つ設定できるようになっていて、下図は中段(WAITM)のみ1の設定で前段と後段はゼロの状態です。
SelUpper/はPIC側の8bitデータバスと68K側の上位バイトバスを接続しているHC245をアクティブにするための信号です。
メモリをアクセスする上では問題無い波形に見えるのでメモリライト&リードのテストプログラムを実行してみました。
下記が実行結果で問題無くメモリにアクセスできているようですね。
因みに上で書いた中段のウェイトをゼロにした場合のロジアナ波形が下記で、メモリテストプログラムの結果もNGだったのでウェイトパラメータは中段のみ1で前段と後段はゼロで決定です。
次の段階として MC68Kを動かしてみたいのですが、リセットがうまくかからないようで動作が変です^^;
68Kのマニュアルを再度チェックしたところ、68Kをリセットするためには RESET#のみならず、HALT# もアクティブにする必要があることに気が付きました(HALTは使わないものとして16MHzのクロック出力のためのピンを追加しましたorz)
いつものことではありますがPICのピン不足に悩んでしまいます。今回使用するメモリはライト時に OE# はdon't care(詳細は前回の記事を参照)なので下記の変更をすることにしました。
変更後のメモリリード/ライト時のロジアナ波形が下図になります。想定通りですね。メモリ試験プログラムの結果もOKでした。
それでもまだ68Kがうまく動かないのようなので続きは次回のお楽しみということで今回はここまでにします。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
yahooニュースの見分け困難!半導体の『模倣品』流通…真贋判定会社は大忙し「約3割が模倣品の懸念」を見ると外観で偽物チップを見分ける上で一番重要視されるのがインデックスマークの有無(偽物は表面を削るのでマークが消える)だそうです。
模倣品流通のニュース |
|
下の写真は今回購入したメモリです。確認のためにそれぞれの店舗から購入したチップを並べて比較してみるとDIP変換基板に半田付けした方はインデックスマークが・・・無いorz
購入したメモリチップ |
|
ハードディバッグ時に偽チップの可能性まで考えるのは効率が悪いのでブレッドボード上のメモリを早々にインデックスマーク有りのチップに変えました。
また、CPU本体の MC68HC000P16 も千円以下の安価な物を幾つか海外の通販で購入していますが、最近届いたものが下の写真のように元の刻印を消しもしないである意味正々堂々としたまがい品でしたw
元の刻印のようにP12であれば私の所有しているDIPのMC68HCの中では最高速度かもしれないのでまだいいのですが "P12" も偽刻印で実は・・ってことにならないか不安です。
最近届いた MC68HC000 |
|
今回も前回の記事と同様に通販での偽物ネタから入ってしまいましたが、本題のPICからのメモリアクセスの検証結果についてメモを残しておきたいと思います。
始めにPICから供給する68K用のクロックの確認からです。PICからは16MHzと8MHzを供給して68Kのクロックをどちらにするかジャンパーピンで切り替えられるようにする予定です。
下図がロジアナで確認した結果で、ロジアナのサンプリングとの関係でピッタリの数値ではないですが想定通り出ているようです。
PICからのクロック信号(サンプリング:100MHz) |
|
PICからのメモリリードとライト時のロジアナ波形が下図になります。PICのパラレルマスタポート(PMP)モジュールのマスターモードを使用してアクセスしています。ウエイトのパラメータ設定はアクセス時の前段/中段/後段の3つ設定できるようになっていて、下図は中段(WAITM)のみ1の設定で前段と後段はゼロの状態です。
SelUpper/はPIC側の8bitデータバスと68K側の上位バイトバスを接続しているHC245をアクティブにするための信号です。
PICからのメモリリード(サンプリング:50MHz) |
|
PICからのメモリライト(サンプリング:50MHz) |
|
メモリをアクセスする上では問題無い波形に見えるのでメモリライト&リードのテストプログラムを実行してみました。
下記が実行結果で問題無くメモリにアクセスできているようですね。
メモリ試験プログラムと実行結果(picle言語) |
|
因みに上で書いた中段のウェイトをゼロにした場合のロジアナ波形が下記で、メモリテストプログラムの結果もNGだったのでウェイトパラメータは中段のみ1で前段と後段はゼロで決定です。
ウェイト無しでのPICからのメモリリード(サンプリング:50MHz) |
|
ウェイト無しでのPICからのメモリライト(サンプリング:50MHz) |
|
次の段階として MC68Kを動かしてみたいのですが、リセットがうまくかからないようで動作が変です^^;
68Kのマニュアルを再度チェックしたところ、68Kをリセットするためには RESET#のみならず、HALT# もアクティブにする必要があることに気が付きました(HALTは使わないものとして16MHzのクロック出力のためのピンを追加しましたorz)
いつものことではありますがPICのピン不足に悩んでしまいます。今回使用するメモリはライト時に OE# はdon't care(詳細は前回の記事を参照)なので下記の変更をすることにしました。
変更内容 |
---|
-+- | > > 10K 追加 > | 68K:RESET/ ----+------------- PIC:RA0 -+- | > > 10K > | ↓変更 68K:HALT/ ----+------------- PIC:RA1(BG/ 入力から変更) ・HC368 Y2(5pin) の接続先を MCS/ から AS/に変更 ・PICの11ピン(MRD/)を RB13として BG/入力に変更 |
変更後のメモリリード/ライト時のロジアナ波形が下図になります。想定通りですね。メモリ試験プログラムの結果もOKでした。
変更後のPICからのメモリリード(サンプリング:50MHz) |
|
変更後のPICからのメモリライト(サンプリング:50MHz) |
|
それでもまだ68Kがうまく動かないのようなので続きは次回のお楽しみということで今回はここまでにします。
[TOP] [ 前へ ] 連載記事 [ 次へ ]