最初に通販ネタですが、今回使用予定のメモリAS6C8016(512Kx16bit)は通販での偽物に対するリスクヘッジで二つの店舗から2個ずつ購入しています。
yahooニュースの
見分け困難!半導体の『模倣品』流通…真贋判定会社は大忙し「約3割が模倣品の懸念」を見ると外観で偽物チップを見分ける上で一番重要視されるのがインデックスマークの有無(偽物は表面を削るのでマークが消える)だそうです。
下の写真は今回購入したメモリです。確認のためにそれぞれの店舗から購入したチップを並べて比較してみるとDIP変換基板に半田付けした方はインデックスマークが・・・無いorz
ハードディバッグ時に偽チップの可能性まで考えるのは効率が悪いのでブレッドボード上のメモリを早々にインデックスマーク有りのチップに変えました。
また、CPU本体の
MC68HC000P16 も千円以下の安価な物を幾つか海外の通販で購入していますが、最近届いたものが下の写真のように元の刻印を消しもしないである意味正々堂々としたまがい品でしたw
元の刻印のようにP12であれば私の所有しているDIPのMC68HCの中では最高速度かもしれないのでまだいいのですが "P12" も偽刻印で実は・・ってことにならないか不安です。
今回も
前回の記事と同様に通販での偽物ネタから入ってしまいましたが、本題の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言語)
|
:l
1:# Pic24MC68K PicMemCheck Ver 0.01 2021/12/08
2:# ver 0.01 by skyriver
3:
4:use LibCpm;
5:use LibSpi;
6:
7:
8:proc main() {
9: var i,dat;
10: init();
11: initPmp();
12: initSpi();
13:# initSd();
14:
15: PrnStr_( "init done\n" );
16:
17: LATA[-2]=LATA[-2]&$fffC; # on reset:a0 halt:a1
18:
19: PmpOn();
20:
21: PrnStr_( "Pmp on\n" );
22:
23: PmpSetAdr(0);
24: dat = 1;
25: for ( i = 0; i < 16; i = i + 1 ) {
26: MemWr( dat );
27: dat = dat * 2;
28: }
29: dat = 1;
30: for ( i = 0; i < 16; i = i + 1 ) {
31: MemWr( ~dat );
32: dat = dat * 2;
33: }
34:
35: PrnStr_( "Write mem\n" );
36:
37: Rdump( $00 );
38: Rdump( $40 );
39: exit();
40:}
:run
init done
Pmp on
Write mem
0000 : 0001 0002 0004 0008 0010 0020 0040 0080
0008 : 0100 0200 0400 0800 1000 2000 4000 8000
0010 : FFFE FFFD FFFB FFF7 FFEF FFDF FFBF FF7F
0018 : FEFF FDFF FBFF F7FF EFFF DFFF BFFF 7FFF
0020 : 8857 2E76 8E40 6A15 1ADB 29D4 BE84 6A0D
0028 : A167 0257 B69B 6FF1 6657 3611 2A43 1B52
0030 : EF31 7B59 6EDD A124 AA15 906A ADF8 EB65
0038 : 6C51 AA14 6B75 B01C A9B9 BFC5 DE94 853D
0040 : 8807 72A0 4E4C 22B6 CE44 B9F9 EF42 8CD9
0048 : 6355 0ADC 2ED0 AE50 2255 C2CC 2222 8D31
0050 : 0EF8 E813 F975 FA5D BAB5 7915 B355 2A47
0058 : 2C75 4753 D335 BA45 A9F9 9AF5 CA55 114F
0060 : B37E 0A03 0C26 8BD9 2B47 AA51 BD74 AE95
0068 : 2175 0E55 3B14 4ED8 E63D 22D5 E897 3EF7
0070 : EA16 F9CD 86F9 2445 8AC0 B86F 377F C949
0078 : EA0D BB19 92D5 F06F E341 E867 B565 CA63
:
|
因みに上で書いた中段のウェイトをゼロにした場合のロジアナ波形が下記で、メモリテストプログラムの結果も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] [ 前へ ] 連載記事
[ 次へ ]
コメント 0