「WiFi - WiFi初期化」の編集履歴(バックアップ)一覧はこちら
「WiFi - WiFi初期化」(2007/12/09 (日) 22:43:47) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
-初期化手順
次のイベントを順序どおり済ませる必要があります。
これらは、順序を変えることもできますが、次の順序でやるのがベストです。
[4000304h].Bit1 = 1 ;POWCNT2 ; WiFiシステムの電源を有効にする
W_MACADDR = firmware[036h] ; 48bit Mac アドレスのセット
reg[012h] = 0000h ;W_IE ; 割り込み無効
-ワイヤレスシステムの起動 :
reg[036h] = 0000h ;W_POWER_US ;パワーダウンビットのクリア
delay 8 ms ; (ディレイを入れる ?)
reg[168h] = 0000h ;W_BBSIOPOWER ; /
temp=BB[01h] ;
BB[01h]=temp AND 7Fh ; BB[01h].Bit7 のリセットと、以前のBB[01h]の値からリストア
BB[01h]=temp ;
delay 30 ms ; -(ディレイを入れる)
call init_sub_functions ; -下の、 "16個のレジスタをファームウェアの値で初期化"と同じ。
; "RF レジスタの初期化" もする。
; これらはたぶん、必須ではない。
-Mac システムの初期化 :
reg[004h] = 0000h - W_MODE_RST ; ハードウェアモードのセット
reg[008h] = 0000h - ? ;
reg[00Ah] = 0000h - ? ; (RX フィルタ関連)
reg[012h] = 0000h - W_IE ; もう1度割り込み無効
reg[010h] = FFFFh - W_IF ; 割り込みの設定
reg[254h] = 0000h - ? ; このポートは存在するのかどうか不明 ???
reg[0B4h] = FFFFh - ? ;
reg[080h] = 0000h - W_BEACONTRANS ; 自動ビーコン送信無効
reg[02Ah] = 0000h - ? ; W_AID 関連?
reg[028h] = 0000h - W_AID ; W_AID
reg[0E8h] = 0000h - W_US_COUNTCNT ; マイクロ秒カウンタ無効
reg[0EAh] = 0000h - W_US_COMPARECNT ; マイクロ秒比較無効
reg[0EEh] = 0001h - ? ;
reg[0ECh] = 3F03h - ? ;
reg[1A2h] = 0001h - ? ;
reg[1A0h] = 0000h - ? ;
reg[110h] = 0800h - ? ;
reg[0BCh] = 0001h - ? ; disable short preamble
reg[0D4h] = 0003h - ? ;
reg[0D8h] = 0004h - ? ;
reg[0DAh] = 0602h - ? ;
reg[076h] = 0000h - W_BUF_WR_SKIP ; ギャップ/スキップの無効 (オフセット=0)
-16 個のレジスタを Firmware[044h~063h] の値で初期化
reg[146h] = firmware[044h] ;W_CONFIG_146h
reg[148h] = firmware[046h] ;W_CONFIG_148h
reg[14Ah] = firmware[048h] ;W_CONFIG_14Ah
reg[14Ch] = firmware[04Ah] ;W_CONFIG_14Ch
reg[120h] = firmware[04Ch] ;W_CONFIG_120h
reg[122h] = firmware[04Eh] ;W_CONFIG_122h
reg[154h] = firmware[050h] ;W_CONFIG_154h
reg[144h] = firmware[052h] ;W_CONFIG_144h
reg[130h] = firmware[054h] ;W_CONFIG_130h
reg[132h] = firmware[056h] ;W_CONFIG_132h
reg[140h] = firmware[058h] ;W_CONFIG_140h
reg[142h] = firmware[05Ah] ;W_CONFIG_142h
reg[038h] = firmware[05Ch] ;W_POWER_TX
reg[124h] = firmware[05Eh] ;W_CONFIG_124h
reg[128h] = firmware[060h] ;W_CONFIG_128h
reg[150h] = firmware[062h] ;W_CONFIG_150h
-RFレジスタの初期化
numbits = BYTE firmware[041h] ;通常 18h
numbytes = (numbits+7)/8 ;通常 3
reg[0x184] = (numbits+80h) AND 017Fh -- W_RFSIOCNT
for i=0 to BYTE firmware[042h]-1 ;number of entries (usually 0Ch) (0..0Bh)
if BYTE firmware[040h]=3 { -- doesn't in current firmware...
RF_Write(0x50000 | (i<<8) | flash byte at 0xCE+i);
;not going to go over this one, as it's not the case in present firmware.
else
RF_Write(numbytes flash bytes, starting at 0xCE + i*numbytes);
endif
-ベースバンドシステムの初期化
(Firmware ブートコードで既にセットされているので必須ではない)
reg[160h] = 0100h ;W_BBSIOMODE
for(i=0;i<0x69;i++) BB_Write( i, flash byte 0x64+i );
-Mac アドレスのセット
0x04800018 から始まるMAC アドレスに flash[0x36] の6バイトをコピー (なぜもう一度やるのかは不明)
-いくつかのデフォルト値のセット
reg[02Ch]=0007h ;W_RETRLIMIT -- actually, needs to be set for every transmit
Set channel (see section on changing channels)
Set Mode 2 -- sets bottom 3 bits of W_MODE_WEP to 2
Set Wep Mode / key -- Wep mode is bits 3..5 of W_MODE_WEP
BB[13h] = 00h ;CCA operation (use only carrier sense, without ED)
BB[35h] = 1Fh ;Energy Detection Threshold (ED)
-- To further init wifi to the point that you can properly send
-- and receive data, there are some more variables that need to be set.
reg[032h] = 8000h -- W_WEP_CNT ;Enable WEP processing
reg[134h] = FFFFh -- ;reset millisecond counter related to beacons
reg[028h] = 0000h -- W_AID ;clear W_AID value
reg[02Ah] = 0000h -- ? ;(they just like setting it when they set W_AID)
reg[0E8h] = 0001h -- W_US_COUNTCNT ;enable microsecond counter
reg[038h] = 0000h -- W_POWER_TX ;disable transmit power save
reg[020h] = 0000h -- W_BSSID_0 ;\
reg[022h] = 0000h -- W_BSSID_1 ; BSSIDのクリア
reg[024h] = 0000h -- W_BSSID_2 ;/
-- TX 準備
reg[0AEh] = 000Dh -- W_TXCNT ; 送信待ちのものをフラッシュ
-- RX 準備
reg[030h] = 8000h W_RXCNT ; RX システム有効 (下でもう一度実行)
reg[050h] = 4C00h W_BUF_RD_BEGIN ; (サンプル値)
reg[052h] = 5F60h W_BUF_RD_END ; (長さ = 4960 bytes)
reg[056h] = 0C00h/2 W_WRITECSRLATCH ; FIFO ラッチアドレス開始
reg[05Ah] = 0C00h/2 W_RXREADCSR ; FIFO end, same as begin at start.
reg[062h] = 5F5Eh last element of fifo (unclear if this is necessary)
reg[030h] = 8001h W_RXCNT ; 有効, and latch new FIFO values to hardware
--
reg[030h] = 8000h -- W_RXCNT 受信有効 (again?)
reg[010h] = FFFFh -- W_IF 割り込みフラグクリア
reg[012h] = whatever -- W_IE 割り込み有効
reg[1AEh] = 1FFFh -- W_STAT_OVF_IE select desired STAT Overflow interrupts
reg[1AAh] = 0000h -- W_STAT_INC_IE select desired STAT Increase interrupts
reg[0D0h] = 0181h -- W_RXFILTER set to 0x581 when you successfully connect
to an access point and fill W_BSSID with a mac
address for it. (W_RXFILTER) [not sure on the values
for this yet]
reg[0E0h] = 000Bh -- ? ;
reg[008h] = 0000h -- ? ; (もう一度?)
reg[00Ah] = 0000h -- ? ; (related to rx filter) (again?)
reg[004h] = 0001h -- W_MODE_RST ; ハードウェアモード
reg[0E8h] = 0001h -- W_US_COUNTCNT ; マイクロ秒カウンタ有効 (もう1度?)
reg[0EAh] = 0001h -- W_US_COMPARECNT ; マイクロ秒比較有効
reg[048h] = 0000h -- W_POWER_? ; [パワーセーブ機能の無効]
reg[038h].Bit1 = 0 -- W_POWER_TX ; [これも]
reg[048h] = 0000h -- W_POWER_? ; [もう一度。これは必要なのかどうか分からない]
reg[0AEh] = 0002h -- W_TXCNT ;
reg[03Ch].Bit1 = 1 -- W_POWERSTATE ; queue enable power (RX 電源…だと思う)
reg[0ACh] = FFFFh -- W_TXOPT ; 何かのリセット
これでパケットの送受信ができるようになります。
----
-初期化手順
次のイベントを順序どおり済ませる必要があります。
これらは、順序を変えることもできますが、次の順序でやるのがベストです。
[4000304h].Bit1 = 1 ;POWCNT2 ; WiFiシステムの電源を有効にする
W_MACADDR = firmware[036h] ; 48bit Mac アドレスのセット
reg[012h] = 0000h ;W_IE ; 割り込み無効
-ワイヤレスシステムの起動 :
reg[036h] = 0000h ;W_POWER_US ;パワーダウンビットのクリア
delay 8 ms ; (ディレイを入れる ?)
reg[168h] = 0000h ;W_BBSIOPOWER ; /
temp=BB[01h] ;
BB[01h]=temp AND 7Fh ; BB[01h].Bit7 のリセットと、以前のBB[01h]の値からリストア
BB[01h]=temp ;
delay 30 ms ; -(ディレイを入れる)
call init_sub_functions ; -下の、 "16個のレジスタをファームウェアの値で初期化"と同じ。
; "RF レジスタの初期化" もする。
; これらはたぶん、必須ではない。
-Mac システムの初期化 :
reg[004h] = 0000h - W_MODE_RST ; ハードウェアモードのセット
reg[008h] = 0000h - ? ;
reg[00Ah] = 0000h - ? ; (RX フィルタ関連)
reg[012h] = 0000h - W_IE ; もう1度割り込み無効
reg[010h] = FFFFh - W_IF ; 割り込みの設定
reg[254h] = 0000h - ? ; このポートは存在するのかどうか不明 ???
reg[0B4h] = FFFFh - ? ;
reg[080h] = 0000h - W_BEACONTRANS ; 自動ビーコン送信無効
reg[02Ah] = 0000h - ? ; W_AID 関連?
reg[028h] = 0000h - W_AID ; W_AID
reg[0E8h] = 0000h - W_US_COUNTCNT ; マイクロ秒カウンタ無効
reg[0EAh] = 0000h - W_US_COMPARECNT ; マイクロ秒比較無効
reg[0EEh] = 0001h - ? ;
reg[0ECh] = 3F03h - ? ;
reg[1A2h] = 0001h - ? ;
reg[1A0h] = 0000h - ? ;
reg[110h] = 0800h - ? ;
reg[0BCh] = 0001h - ? ; disable short preamble
reg[0D4h] = 0003h - ? ;
reg[0D8h] = 0004h - ? ;
reg[0DAh] = 0602h - ? ;
reg[076h] = 0000h - W_BUF_WR_SKIP ; ギャップ/スキップの無効 (オフセット=0)
-16 個のレジスタを Firmware[044h~063h] の値で初期化
reg[146h] = firmware[044h] ;W_CONFIG_146h
reg[148h] = firmware[046h] ;W_CONFIG_148h
reg[14Ah] = firmware[048h] ;W_CONFIG_14Ah
reg[14Ch] = firmware[04Ah] ;W_CONFIG_14Ch
reg[120h] = firmware[04Ch] ;W_CONFIG_120h
reg[122h] = firmware[04Eh] ;W_CONFIG_122h
reg[154h] = firmware[050h] ;W_CONFIG_154h
reg[144h] = firmware[052h] ;W_CONFIG_144h
reg[130h] = firmware[054h] ;W_CONFIG_130h
reg[132h] = firmware[056h] ;W_CONFIG_132h
reg[140h] = firmware[058h] ;W_CONFIG_140h
reg[142h] = firmware[05Ah] ;W_CONFIG_142h
reg[038h] = firmware[05Ch] ;W_POWER_TX
reg[124h] = firmware[05Eh] ;W_CONFIG_124h
reg[128h] = firmware[060h] ;W_CONFIG_128h
reg[150h] = firmware[062h] ;W_CONFIG_150h
-RFレジスタの初期化
numbits = BYTE firmware[041h] ;通常 18h
numbytes = (numbits+7)/8 ;通常 3
reg[0x184] = (numbits+80h) AND 017Fh -- W_RFSIOCNT
for i=0 to BYTE firmware[042h]-1 ;number of entries (usually 0Ch) (0..0Bh)
if BYTE firmware[040h]=3 { -- doesn't in current firmware...
RF_Write(0x50000 | (i<<8) | flash byte at 0xCE+i);
;not going to go over this one, as it's not the case in present firmware.
else
RF_Write(numbytes flash bytes, starting at 0xCE + i*numbytes);
endif
-ベースバンドシステムの初期化
(Firmware ブートコードで既にセットされているので必須ではない)
reg[160h] = 0100h ;W_BBSIOMODE
for(i=0;i<0x69;i++) BB_Write( i, flash byte 0x64+i );
-Mac アドレスのセット
0x04800018 から始まるMAC アドレスに flash[0x36] の6バイトをコピー (なぜもう一度やるのかは不明)
-いくつかのデフォルト値のセット
reg[02Ch]=0007h ;W_RETRLIMIT -- actually, needs to be set for every transmit
Set channel (see section on changing channels)
Set Mode 2 -- sets bottom 3 bits of W_MODE_WEP to 2
Set Wep Mode / key -- Wep mode is bits 3..5 of W_MODE_WEP
BB[13h] = 00h ;CCA operation (use only carrier sense, without ED)
BB[35h] = 1Fh ;Energy Detection Threshold (ED)
-- To further init wifi to the point that you can properly send
-- and receive data, there are some more variables that need to be set.
reg[032h] = 8000h -- W_WEP_CNT ;Enable WEP processing
reg[134h] = FFFFh -- ;reset millisecond counter related to beacons
reg[028h] = 0000h -- W_AID ;clear W_AID value
reg[02Ah] = 0000h -- ? ;(they just like setting it when they set W_AID)
reg[0E8h] = 0001h -- W_US_COUNTCNT ;enable microsecond counter
reg[038h] = 0000h -- W_POWER_TX ;disable transmit power save
reg[020h] = 0000h -- W_BSSID_0 ;\
reg[022h] = 0000h -- W_BSSID_1 ; BSSIDのクリア
reg[024h] = 0000h -- W_BSSID_2 ;/
-- TX 準備
reg[0AEh] = 000Dh -- W_TXCNT ; 送信待ちのものをフラッシュ
-- RX 準備
reg[030h] = 8000h W_RXCNT ; RX システム有効 (下でもう一度実行)
reg[050h] = 4C00h W_BUF_RD_BEGIN ; (サンプル値)
reg[052h] = 5F60h W_BUF_RD_END ; (長さ = 4960 bytes)
reg[056h] = 0C00h/2 W_WRITECSRLATCH ; FIFO ラッチアドレス開始
reg[05Ah] = 0C00h/2 W_RXREADCSR ; FIFO end, same as begin at start.
reg[062h] = 5F5Eh last element of fifo (unclear if this is necessary)
reg[030h] = 8001h W_RXCNT ; 有効, and latch new FIFO values to hardware
--
reg[030h] = 8000h -- W_RXCNT 受信有効 (again?)
reg[010h] = FFFFh -- W_IF 割り込みフラグクリア
reg[012h] = whatever -- W_IE 割り込み有効
reg[1AEh] = 1FFFh -- W_STAT_OVF_IE select desired STAT Overflow interrupts
reg[1AAh] = 0000h -- W_STAT_INC_IE select desired STAT Increase interrupts
reg[0D0h] = 0181h -- W_RXFILTER set to 0x581 when you successfully connect
to an access point and fill W_BSSID with a mac
address for it. (W_RXFILTER) [not sure on the values
for this yet]
reg[0E0h] = 000Bh -- ? ;
reg[008h] = 0000h -- ? ; (もう一度?)
reg[00Ah] = 0000h -- ? ; (related to rx filter) (again?)
reg[004h] = 0001h -- W_MODE_RST ; ハードウェアモード
reg[0E8h] = 0001h -- W_US_COUNTCNT ; マイクロ秒カウンタ有効 (もう1度?)
reg[0EAh] = 0001h -- W_US_COMPARECNT ; マイクロ秒比較有効
reg[048h] = 0000h -- W_POWER_? ; [パワーセーブ機能の無効]
reg[038h].Bit1 = 0 -- W_POWER_TX ; [これも]
reg[048h] = 0000h -- W_POWER_? ; [もう一度。これは必要なのかどうか分からない]
reg[0AEh] = 0002h -- W_TXCNT ;
reg[03Ch].Bit1 = 1 -- W_POWERSTATE ; queue enable power (RX 電源…だと思う)
reg[0ACh] = FFFFh -- W_TXOPT ; 何かのリセット
これでパケットの送受信ができるようになります。
----
[[@wikiへ>http://kam.jp"><META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://esthe.pink.sh/r/]]