トップ «前の日記(2003年11月03日) 最新 次の日記(2003年11月06日)» 編集
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2003年11月04日 晴れ

CAT709

昨日の実験には誤りがあった。socket2に無線LANカードをさしていたのだが、こいつがIO16#を出しっぱなしにしていて、EK709のIO16#をHにしてもCPUにはLが加わっていた。道理でIO16#を変化させても結果が変わらなかったわけだ。

気を取り直して、無線LANカードを抜き、CFソケットに何もない状態で実験を行った。


『IO16*=H (8bit幅)時の、奇数アドレスからのバイトリード』
奇数アドレスのバイトリードなので、(1)のサイクルで、CPUはA0=H, CE2#=L(上位バイトレーンイネーブル), IORD#=L(リードクロック)を出力する。しかし、IO16=Hを読み取るので今のアクセスは無効と判断し、再度(2)のサイクルでCE1#=L(下位バイトレーンイネーブル), IORD#=L(リードクロック)を出力する。結果、IO16=Hならば、偶数アドレスも奇数アドレス時もD7〜D0を使用するのだが、(1)のサイクルが存在することが問題だ。

問題点
1) IORD# リードクロックが2回出力される。このため IOレジスタ側でフラグがクリアされたり(割り込み要因レジスタなど)、インデックスが進んだりしてしまう(FIFO等)
2) 2回のIORD# リードクロック間でウェイトが入らない。
以上の2点はCAT709の問題ではなく、SH3 CPUの仕様的な問題点だ。ライトのときもまったく同じで、IOWR# ライトクロックが2回出力される。関連リンク
http://www.epsondevice.com/card/technical/errata_shcard_02.html

対策
アドレスデコーダのイネーブル信号にはCE12*を使い、IO16*(H/L)を制御するが、チップに対するチップセレクト信号にはCE12*を使わずにCE1*を使えば問題なさそう。

また、昨日のトラブルのようにIO16*を出しっぱなしにするCFカードも世の中にはあるみたいなので、EB709のソケット(socket1, 2)に挿入しておくと、orされてしまう点にも要注意。CAT709側のソケット0に挿入しておけば問題ない。もう少しデータを詰めて、CAT709の公式ページに書いておかねば。

CAT709

この無線LANカードは、チップセレクト(CE1* | CE2*) 入れなくてもIOCS16* 出しっぱなしにする。仕様的に正しいか分からない。

CAT709

というか、今ざっと調べたら、SundiskのCFカードも、MelcoのCFカードも、IOCS16*を出しっぱなしにするらしい。そうなんだ。