DM 9000駆動MINI 2440での移植学習ノート
DM 9000の移植修正原理を知りたいので,タイミングチャートとピン接続を解析した.
まずDM 9000のピンとMINI 2440のピンの接続を見てみましょう
DM 9000 MINI 2440機能説明SD 0 DATA 0データ信号||SD 15 DATA 15データ信号CMD ADDR 2アドレスと識別するかデータINT EINT 7割り込みIOR#nOEリードコマンドイネーブルIOW#nWEライトコマンドイネーブルAEN nGCS 4スライスイネーブル
16本のデータ線、1本のアドレス線が接続されていることがわかり、この唯一のアドレス線は、データ線が伝送するアドレスかデータかを判断するために使用されるので、この16本のデータ線はデータとアドレスの多重化である
一方、選択信号に使用されるBANK 4は、0 x 2000 0000–0 x 27 FFFFFFFFの範囲のアドレスにアクセスすると、選択可能イネーブル信号nGCS 4がアクティブになる
一方、MINI 2440が提供するカーネルでは、DM 9000のアドレスIOアドレスが0 x 2000,000、データIOが0 x 2000,000,000 4ではアドレスIOにデータを書き込む際にADDR 2がアクティブにならないので、DM 9000に転送するデータはアドレスであり、データIOにデータを書き込む際にADDR 2がアクティブになるので、DM 9000に転送するデータはデータである
DM 9000とS 3 C 2440のタイミング信号を見てみましょう
DM 9000の書き込みタイミング
IO 16,IO 32の2つのピンはMINI 2440で接続されていないので、この2つのピンのタイミングは見られません
は以下のように整理されています.
また、書き込みコマンドは、終了後から次の書き込みコマンドまで最低84 nsの間隔をT 6とする
そしてS 3 C 2440の書き込みタイミングであり、DM 9000はBANK 4に接続されているため、BANKの書き込みタイミングは以下の通りである
DM 9000はMINI 2440上でチップ選択イネーブル、命令イネーブルとデータ信号を書くだけなので、ADDRとnBE信号を見ないで、次のように整理します.
どれくらいの値打ちがあるのか.~
BANKCON 4を見てみましょう
ここでの値はクロック周期であるが、BANKCONはMemory Controllerに接続されている(S 3 C 2440 Aデータマニュアルの表1-4参照)、Memory ControllerはHclkバスクロック信号を使用している(S 3 C 2440 Aデータマニュアルの図7-1参照、kasimの大きな指示に感謝)、S 3 C 2440マニュアルによるとHclkはFclkによって分周されており、具体的な分周比はプレート毎に異なるが、だからここで周波数の設定は自分で板の設定によって分析して、主周波数が400 MHzだと仮定して、それからFclk、Hclk、Pclkの分周比は1:2:4で、Hclkは200 MHzで、どのクロック周期ごとに5 nsです
DM 9000のタイミングチャートと比較して、Tcos対応T 1を計算すると、最低でも5 ns、つまり1個のclock Tacc対応T 2であるべきか、最低でも22 nsであるべきか、私たちはここで最低でも6個のclock、つまり30 nsのToch対応T 5を選択しなければならないが、ここでは設定されていないが、文字通りTcohはToch、Tochは最低でも5 ns、つまり1個のclock Tcah対応T 4であるべきだと思う.前にすでにTochがあったので、ここでは0 ns、つまり0 clockに設定できます
S 3 C 2440では、1つの書き込みコマンドが次の書き込みコマンドが開始可能になるまでの時間間隔をToch+Tcah+Tacp+Tacs+Tcos Tacsとするのがアドレス信号の後のスライス信号の開始間隔であり、ここではまず0 ns、すなわち0個のclockとする
Toch+Tcah+Tacp+Tacs+Tcosは>84 5+0+Tacp+0+5>84 Tacp>74であるがTacpの最大値は6個のclock,すなわち30 nsであり,44 nsも少なく,約9個のclockはToch Tcah TacsとTcosを修正すれば,我々が与えたのはいずれも最小値であるが,信号安定のためにその範囲を緩和することができ,TcosとTochを4個のclockに設定TacsとTcahを2個のClockに設定すると合計時間は(4+2+6+2+4)*5=90 ns
最後のDM 9000 1サイクルは1つのデータしか処理できないので、PMCはnormal(1 data)であるべきである.
書き込みシーケンスの分析が終わりました.今、読み取りシーケンスを見てみましょう.
DM 9000の読み出しタイミングは以下の通りである
は以下のように整理されています.
読み取り命令イネーブル終了後から次の読み取り命令イネーブルに最低80 nsの間隔をT 6とする
次に、S 3 C 2440の読み出しタイミングであり、タイミングは以下の通りである
以下に整理します.
Tcos対応T 1は、最低でも5 ns、つまり1 clockで、ここでは書き込み操作と同じ4つのclock Tacc対応T 2に設定されていますが、最低でも22 ns、ここでは書き込み操作と同じ6つのclock Toch対応T 5に設定されています.最低でも5 ns、つまり1つのclockで、ここでは書き込み操作と同じ4つのclockに設定されています
その他の時間間隔は、書き込み操作と同様にTcahが2個のclock Tacpが6個のclock Tacsが2個のclock PMCがnormal(1 data)に設定してから、読み出しコマンドの終了後から次の読み出しコマンドの有効化までの時間間隔80 nsが満たされていないことを確認します.
やはりToch+Tcah+Tacp+Tacs+Tcos(4+1+6+1+4)*5=15*5=90 nsで、条件を満たすことができます
さてBANKCON 4の設定はTacs=2個clock=10 Tcos=4個clock=11 Tacc=6個clock=100 Tcoh=4個clock=11 Tcah=2個clock=10 Tacp=6個clock=11 PMC=normal(1 data)=00
つまり0 x 5 CEC
BWSONを見てみると、このレジスタはBANKの帯域幅と待機状態を構成する責任を負っています.私たちが受けているのはnGCS 4です.したがって、このフィールドST 4がBANK 4がUB/LB(書き込み高/低バイトイネーブル)を使用しているかどうかにかかわらず、DM 9000はnWBE[3:0]の4つのピンを接続していないので、このフィールドにかかわらず
今友好的なLinuxの下でDM 9000駆動がS 3 C 2440に適応するためにどんな修正をしたかを見てみましょう
#if defined(CONFIG_ARCH_S3C2410)
#include <mach/regs-mem.h>
#endif
#if defined(CONFIG_ARCH_S3C2410)
//
unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;
// 4 BANK
unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;
#endif
#if defined(CONFIG_ARCH_S3C2410)
// BWSCON DW4 0
// 16
// BANK4 WAIT
// BANK4 SRAM
*((volatile unsigned int *)S3C2410_BWSCON) =
(oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
// PMC - Page mode configuration - 1 data
// Tacp - Page mode access cycle @ Page mode - 6 clocks
// Tcah - Address hold time after nGCSn - 4 clocks
// Tcoh - Chip selection hold time after nOE - 1 clock
// Tacc - Access cycle - 14 clocks
// Tcos - Chip selection set-up time before nOE - 4 clocks
// Tacs - Address set-up time before nGCSn - 0 clock
*((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
#endif
#if defined(CONFIG_ARCH_S3C2410)
printk("Now use the default MAC address: 08:90:90:90:90:90
");
mac_src = "friendly-arm";
ndev->dev_addr[0] = 0x08;
ndev->dev_addr[1] = 0x90;
ndev->dev_addr[2] = 0x90;
ndev->dev_addr[3] = 0x90;
ndev->dev_addr[4] = 0x90;
ndev->dev_addr[5] = 0x90;
#else
#if defined(CONFIG_ARCH_S3C2410)
*(volatile unsigned int *)S3C2410_BWSCON = oldval_bwscon;
*(volatile unsigned int *)S3C2410_BANKCON4 = oldval_bankcon4;
#endif
主に3つの機能修正BWSCONレジスタ修正BANKCON 4レジスタ修正MAC情報を実行する
以前はMINI 2440,Fclk,Hclk,PclkへのUBOot移植の分周比1:4:8を見ていた.
ねえMINI 2440のHclkは100 MHz、つまり1クロック10 nsで、ちょうど上の分析の2倍大きくて、
クロック数/2 Tacs=1個clock=01 Tcos=2個clock=10 Tacc=3個clock=010 Tcoh=2個clock=10 Tcah=1個clock=01 Tacp=3個clock=01 PMC=normal(1 data)=00
つまり0 x 3294ここで注意したいのは、WAIT信号を使用する場合Taccが4個以上のclockになるので*(volatile unsigned int*)S 3 C 2410_BWSCON) = (oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4; *((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
*(volatile unsigned int*)S 3 C 2410_に変更BWSCON) = (oldval_bwscon & ~(3<<16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4 )) | S3C2410_BWSCON_DW4_16; *((volatile unsigned int *)S3C2410_BANKCON4) = 0x3294;
皆さんが好きなのは、#if defined(CONFIG_ARCH_S 3 C 2410)printk(「Now use the default MAC address:08:90:90:90:90:90:90」);#if defined(CONFIG_ARCH_NO 2410)printk(「Now use the default MAC address:08:90:90:90:90:90:90:90」)に変更します.
このようにDM 9000を読み取ることによってMACアドレスを得ることができて、私は試験を経て、得たMACアドレスはff:ff:ff:ff:ff:ff:ffがTCP/IPプロトコルスタックに対してどんな影響があることを知りません
これは*(volatile unsigned int*)S 3 C 2410_を使用しています.BWSCON) = (oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4; *((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c; 時の遅れ
応答時間は0.747前後
これは*(volatile unsigned int*)S 3 C 2410_を使用しています.BWSCON) = (oldval_bwscon & ~(3<<16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4 )) | S3C2410_BWSCON_DW4_16; *((volatile unsigned int *)S3C2410_BANKCON4) = 0x3294; 時の遅れ
応答時間が改善されていることがわかりますが~オシロスコープを持っていないので、このような設定がDM 9000に悪影響を及ぼすかどうか分かりません~
だからみんなのDM 9000切ったら私に会いに来ないでね~ハハハ(逃げる~
タイミング分析も初めてなので、书き方が间违っているところがありましたら是非ご指摘ください.