1、 硬體除錯
(1)switch晶元位址方式
確定switch在板子上是多晶元還是單晶元方案(即多址與單址),通過p10_addr[0~4]判斷:[0~4]: 0b00000:為單晶元方案;其他為多晶元方案,最大支援31個switch級聯。單晶元與多晶元在暫存器訪問上有很大的區別,多晶元要複雜些。一般採用單晶元方案,hi3520a上的switch就是採用單晶元模式。
(2)switch埠模式
port10口連線cpu,hi3520a支援rgmii模式,因此需要在硬體上將該埠配置為rgmii模式!通過p10_mode[0~2]判斷:[0~2]:0b001為rgmii模式,0b000:gmi模式等,不同模式決定了時鐘引腳不一樣。
port9口也可以通過p9_mode[0~2]來設定模式,此處連線光口,因此設定為[0~2]:0b101為1000base-x千兆模式
port8口只有乙個引腳p8_mode來設定模式,高電平為1000base-x模式,此處設定為該模式!
注:以上
(1)(2)
(3)switch工作模式
通過引腳sw_mode[0:1], 0b00:cpu mode, 0b01:reserved, 0b10: test mode, 0b11:eeprom mode。cpu模式:需要通過軟體配置switch;test模式:使用預設引數;eeprom mode模式:從eeprom中讀取引數配置switch,當沒有eeprom時使用預設引數。一般使用test模式!
以上(1)(2
)(3)三點是硬體上實現
swtich
必須要注意的,否則有可能導致
switch
無法正常工作,或者
cpu無法訪問
switch
!以下(4)(
5)兩點不一定會遇到,只是本專案使用光口遇到:
(4)光口電壓控制
光口電壓通過gpio控制,電口則直接連線3.3v。電口測試沒有問題,但是光口就是ping不同,一開始懷疑是光模組有問題,換了之後還是不行;然後懷疑是光纖有問題,換了之後還是不行,然後以為是電壓沒有控制好,未接光模組的情況下測量光口電壓也是有3.3v的,但是接了光模組後電壓就變為1v左右,最後發現是硬體的磁珠問題,把該器件去掉就好了!
(5)光模組丟幀
同樣的測試環境電口不會有丟幀現象,而光口則丟幀比較嚴重!剛開始懷疑是測試環境導致(原先放在測試中心測試),而後發現自己位置上簡單測試也會發生同樣的丟幀。接著對比電口和光口的暫存器值,將兩類不一樣的暫存器值都讀出來進行比較,發現基本是一樣的,不一樣的地方也不會有影響!然後去讀取cpu的mac暫存器,也未出現丟幀,錯誤幀等值!由於對switch不是很熟悉,一開始未注意到switch每個埠都可以統計進出網路包!統計各個口的接收資料報後發現光口進來的,到cpu出去的p10口,資料報增加的數值是相等的,然後檢視傳送另外一台裝置傳送的資料報,發現接收到的比傳送的少!因此確定裝置switch之間發生資料丟失,最終定位到是switch之間光檢測模組導致!原因如下:光模組檢測晶元的los檢測訊號引腳一面連線到cpu的gpio上,另一面連線到switch的檢測引腳上!los是輸出引腳,由於cpu的gpio未進行配置預設vou1120_data的功能,從而影響了光模組檢測晶元!最後將該引腳配置成gpio輸入即可!
2、 軟體除錯
(1)uboot修改
swtich有兩種id,一種是phy id,另外一種是product id。每個埠都有上述兩類id(m6097中port0~port10對應的phy位址為0~a,port0~port10對應的暫存器位址0x10~0x1a),phy位址獲取phy id, port暫存器位址獲取product id!此處使用product id作為switch id。如果使用phy id作為switch id則需要禁止m6097 ppu,否則無法正確讀取phy id。另外如果禁止m6097的ppu就無法對switch外接的phy進行操作。修改**如下:
在uboot驅動的mdio.c中:get_phy_device()介面進行修改,禁止ppu,對phy id進行過濾,當獲取到protduct id時使能switch同cpu的埠port10,由於使用grmii模式,還需要設定
swtich
的grmii
時序(重要)。
uboot中網路驅動是針對phy進行讀寫的,通過讀phy狀態來配置cpu mac控制器,phy狀態根據網線接入的網路不通而有所變化!但是switch同cpu始終相連線,不與phy相連線,因此根據同cpu連線的switch埠屬性強制配置cpu mac控制器!此處設定:強制連線狀態、配置成全雙工,1000base-tx、使用rgmii介面!修改**如下:
(2)kernel修改
核心對switch的配置同uboot基本配置原理是一樣的,只是驅動**位置不一樣而已!具體修改如下:
phy_device.c中get_phy_device介面對phy id進行過濾。
marvell.c中原來就已經修改該驅動,在修改的基礎上mv6097_config_init介面中禁止ppu、強制設定swtich配置,設定
swtich
的grmii
時序(重要)! switch_read_status介面中強制cpu連線狀態、配置成全雙工,1000base-tx。
總之就是同時配置switch和cpu mac控制器,使兩者保持一致的模式。
S 基於Python的Opencv入門學習 2
def access pixel image 顯示出一張底片一樣的,畫素取反 print image.shape height image.shape 0 width image.shape 1 channels image.shape 2 print width s,height s,channe...
基於S3C2440的bootloader移植詳解
首先 在彙編中初始化堆疊,中斷向量表,mmu,時鐘,串列埠等,然後跳到c語言的main函式。這部分 小於4k,放在block0。這個main函式用來將第二段 拷備到dram中並執行。不說這麼多廢話了,說多了無益,讓我們一起來揭開bootloader的神秘的面紗吧!先說下我移植的bootloader的...
基於HTTPS的介面測試 nginx配置SSL
目錄2.4 備案 2.5 網域名稱解析 3.nginx配置ssl 4.postman介面測試 5.小結 雲伺服器配置 這裡需要注意的是,可以選擇活動期去購買,不然 還挺貴的。https還需要ssl證書,在如下路由可以申請到免費的ssl證書。2.3.1 點選申請免費的ssl證書 2.3.2 選擇ssl...