一、網(wǎng)卡基礎(chǔ)知識
1.網(wǎng)卡芯片與開發(fā)板的連接方式
總線式連接方式,使用SROM總線接口。
開發(fā)板核心板,使用SROM控制器的bank1。因此有效地址是0x8800_0000 – 0xffff_ffff。
開發(fā)板上DM9000的連接。使用16-bit數(shù)據(jù)連接方式
網(wǎng)卡芯片有CS引腳,(CS就是chip_select,選線信號,主機向CS發(fā)送有效信號則從機芯片工作,主機向CS發(fā)送無效信號則從機芯片不工作)。這個引腳要接soc的srom控制器的片選引腳。
主機s5pv210的srom控制器每一個bank都有一個片選信號CSn(n=0-5),這里接CSn1,說明DM9000接的是srom的bank1。
所以,可以得到DM9000的總線基地址是0x8800_0000。
DM9000的CMD引腳,并接到了210的ADDR2引腳上。為低,表示16位數(shù)據(jù)線上發(fā)送的是地址,為高,表示16位數(shù)據(jù)線上發(fā)送的數(shù)據(jù)。因此,地址和數(shù)據(jù)是復(fù)用的。
也就是如果要往 DM9000的 0x04地址寫入數(shù)據(jù)a。那么要執(zhí)行以下兩步
第一步:
ADDR2拉低,16位數(shù)據(jù)寫0x04。
也就是
網(wǎng)線有8根線,但是實際只有4根有效通信線,另外4根都是GND,用來抗干擾的。4根通信線中管發(fā)送的是有2根(TX-和TX+),管接收的2根(RX+和RX-),因為網(wǎng)上傳輸?shù)氖?a href="http://www.nncyjs.com/zhuanti/zrnb14" style="color:#4595e6;" target="_blank">差分信號。
210有SROM控制器,
2.Soc的SROM控制器
Bank和網(wǎng)卡芯片的CS引腳(SROM就是SRAM/ROM)。Soc的srom控制器其實就是soc提供的對外總線式連接sram/rom的接口。如果soc要外部外接一些sram/rom類的存儲芯片(或者偽裝成srom接口的芯片,如網(wǎng)卡芯片)就要通過srom控制器來連接。
SROM控制器有6個bank,地址和數(shù)據(jù)都是共有的,但是片選信號不是共用的。因此外部的SROM器件通過連接到自己的片選信號是否有效,從而決定地址和數(shù)據(jù)是否可用。
網(wǎng)卡接在srom中好處就是網(wǎng)卡芯片好像一個存儲芯片一樣,被擴展在soc的一個地址空間中,這樣soc就可以直接用一個地址來訪問網(wǎng)卡芯片的內(nèi)部寄存器。
1)網(wǎng)卡芯片內(nèi)部寄存器使用相對地址訪問
網(wǎng)卡芯片內(nèi)部很多寄存器有一個地址,這個地址是從0x00開始的,但是實際上soc不能用0地址去訪問這個網(wǎng)卡的芯片的內(nèi)部寄存器。
所以soc訪問網(wǎng)卡芯片0地址寄存器的地址應(yīng)該是:起始地址 + 0x00。其中起始地址就是網(wǎng)卡芯片對應(yīng)接在srom控制器的bankn對應(yīng)的基地址。
如使用的九鼎開發(fā)板,網(wǎng)卡芯片接在bank0,基地址就是0x8000_0000。那么soc使用0x8000_0000訪問網(wǎng)卡芯片的0地址寄存器,使用0x8000_0004訪問4地址的寄存器。
2)主機soc上網(wǎng)
其實就是操控網(wǎng)卡芯片內(nèi)部的寄存器、緩沖區(qū)等資源來上網(wǎng)的。也就是soc是通過網(wǎng)卡芯片來間接上網(wǎng)的。
3)總結(jié)
實際上也是一種總線式連接方式。優(yōu)勢是soc內(nèi)部不需要內(nèi)置網(wǎng)卡控制器,所有的SFR全都在外部網(wǎng)卡芯片中,而且還可以通過地址直接訪問(IO與內(nèi)存統(tǒng)一編址),不用像NAND/SD接口一樣使用時序來訪問。
從邏輯上看,網(wǎng)卡更像是soc內(nèi)部串口等模塊。
二、Uboot中驅(qū)動文件
在drivers/net目錄下,有很多網(wǎng)卡驅(qū)動芯片,對于開發(fā)板使用的是DM9000,所以要查看dm9000.h和dm9000.c。這些驅(qū)動代碼來自于linux kernel源代碼。
這個驅(qū)動代碼是linux內(nèi)核中設(shè)計好的,因此不用修改,在uboot中可以直接使用的。而且因為linux驅(qū)動設(shè)計的很合理(數(shù)據(jù)和代碼是分開的,這樣驅(qū)動主要是代碼,數(shù)據(jù)是由硬件開發(fā)板中的接法決定,數(shù)據(jù)由一定的數(shù)據(jù)結(jié)構(gòu)提供),所以驅(qū)動本身具有可移植性。
網(wǎng)卡移植的關(guān)鍵:初始化
Uboot在第二階段init_sequences中進(jìn)行了一系列的初始化,其中就有網(wǎng)卡芯片的初始化。這個初始化是關(guān)鍵,在這里的初始化中只要將網(wǎng)卡芯片正確的初始化了,則網(wǎng)卡芯片就能正常工作。
在board/Samsung/smdkc110/smdkc110.c中的board_init函數(shù),就對dm9000進(jìn)行了初始化。
被注釋掉的是三星提供的uboot中的代碼,后面新增的是修改的代碼。在三星原版中,使用的是SROM的bank5,但是開發(fā)板使用的是bank1,因此要對SROM控制器的bank1進(jìn)行初始化。
SROM_BW設(shè)置SROM控制器的總配置。每4個位控制一個bank,對于使用的bank1,操作7-4位。因此要對這幾位進(jìn)行操作。
網(wǎng)卡工作在16-bit模式,所以 DataWidth1為1 。
原理圖連接時,srom控制器的數(shù)據(jù)data15-0接到網(wǎng)卡的data15-0,所以是以字節(jié)對齊的,所以AddrMode1 為1。
至于第7位和第6位,和時序相關(guān)。這里都設(shè)置為1。
SROM_BCx, 設(shè)置各個bank的時序信息。
MP0_1CON寄存器,配置SROM控制器的GPIO的片選功能。將7-4位設(shè)置為0x20,表示MP01_1管腳為srom的bank1的片選引腳。
照理來說,還需要設(shè)定SROM控制器的地址和數(shù)據(jù)的GPIO的功能,但是對應(yīng)的GPIO功能默認(rèn)為就是SROM的地址和數(shù)據(jù)功能,因此可以不用設(shè)置。
基地址的配置
在smdkv210single.h中,關(guān)于DM9000有如下的宏定義。
表示基地址是0XA800_0000(因為使用的是bank5),CMD線接在了ADDR1。
根據(jù)所用開發(fā)板,修改為如下
基地址為0x8800_0000(bank1),CMD線接在了ADDR2,所以數(shù)據(jù)的地址是基地址+4。
但是上面這樣,是不工作的。
需要將CONFIG_DM9000_BASE 定義為 0x88000300。
修改為88000300的原因,應(yīng)該是和DM9000的芯片有關(guān)系,內(nèi)部寄存器的偏移不是以0地址作為偏移,而是以0x300地址為偏移的。
Uboot中使用ping命令,測試網(wǎng)卡移植是否成功。
如果移植出現(xiàn)以下信息,說明SROM控制器的寄存器配置不正確。檢查dm9000_pre_init函數(shù)(board/Samsung/smdkc110/smdkc110.c),寄存器設(shè)置是否正確。
三、Linux網(wǎng)卡驅(qū)動的典型工作方式
在linux系統(tǒng)中,網(wǎng)卡是一個設(shè)備,這個設(shè)備驅(qū)動工作后會生成一個設(shè)備名叫ethn(n是0、1、2……),無線網(wǎng)卡名字一般叫wlan0、wlan1……。
然后linux系統(tǒng)用一些專用命令來操作網(wǎng)卡,如ifconfig命令。
Linux下的應(yīng)用程序如何使用網(wǎng)卡驅(qū)動來進(jìn)行網(wǎng)絡(luò)通信?最通用的方法就是socket借口。Linux系統(tǒng)中有一系列的API和庫函數(shù),提供了一個socket編程接口,linux下的應(yīng)用程序都是通過socket來實現(xiàn)上網(wǎng)的,socket內(nèi)部就是間接調(diào)用網(wǎng)卡驅(qū)動實現(xiàn)網(wǎng)絡(luò)通信的。
Linux設(shè)計是非常完備的,應(yīng)用層和驅(qū)動層是嚴(yán)格分離的。也就是說寫網(wǎng)絡(luò)編程應(yīng)用層的人根本不用管驅(qū)動,只要會用socket接口即可;寫底層驅(qū)動的人根本不用管應(yīng)用層,只要面向linux的網(wǎng)絡(luò)驅(qū)動框架模型即可。
Ping這樣的命令實現(xiàn)的代碼就是網(wǎng)絡(luò)應(yīng)用的應(yīng)用程序,像dm9000.h和dm9000.c這樣的代碼屬于驅(qū)動程序。在uboot中應(yīng)用是直接調(diào)用驅(qū)動實現(xiàn)的,也就是說ping命令內(nèi)部是直接調(diào)用了dm9000的網(wǎng)卡驅(qū)動中的函數(shù)來實現(xiàn)。
1. Uboot的ping命令實現(xiàn)
實現(xiàn)函數(shù)是do_ping,在common/cmd_net.c中。
使用string_to_ip函數(shù)將輸入的ip地址轉(zhuǎn)化為IPaddr_t類型值。
然后調(diào)用NetLoop函數(shù)(netnet.c中)
函數(shù)前面的部分,都是在構(gòu)建ping的包。
構(gòu)建好后,使用PingStart函數(shù)(netnet.c),準(zhǔn)備發(fā)送ping包。
最后調(diào)用PingSend函數(shù)(netnet.c),將包發(fā)出去。
前面在構(gòu)建數(shù)據(jù),最后使用ArpRequest函數(shù)(netnet.c),將ARP包發(fā)送。因為ping使用的是ARP包。
函數(shù)在之前也在做數(shù)據(jù)的處理,最后調(diào)用eth_send函數(shù)(drivers/net/dm9000x.c中),將數(shù)據(jù)包發(fā)送出去。可以看出,這個函數(shù)是和具體的網(wǎng)卡芯片有關(guān)的。
這個函數(shù),將指定的包,發(fā)送給DM9000網(wǎng)卡,網(wǎng)卡在將該包發(fā)送到網(wǎng)絡(luò)中。
這樣,就完成了ping的ARP包的發(fā)送。
剩下,就是要接收從網(wǎng)絡(luò)回發(fā)的ARP包。
在net_loop函數(shù)的后面,調(diào)用eth_rx函數(shù)(drivers/net/dm9000x.c中)對網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行接收。可以看出這個接收函數(shù)和具體網(wǎng)卡有關(guān)的。
四、啟動內(nèi)核
使用tftp命令,將鏡像下載到內(nèi)存中,然后使用bootm命令運行內(nèi)核。
但是要將串口改為串口2。
而且啟動參數(shù)設(shè)置要如下:
上一篇:基于S3C6410的ARM11學(xué)習(xí)(六) 核心初始化之關(guān)閉所有中斷
下一篇:cortex-a8 uboot系列:第十六章 uboot移植-從三星官方移植
推薦閱讀
史海拾趣
面對電子行業(yè)日新月異的變化和不斷涌現(xiàn)的新挑戰(zhàn),Cotco公司始終保持敏銳的市場觸覺和應(yīng)變能力。公司及時調(diào)整戰(zhàn)略方向,加大在新興領(lǐng)域如物聯(lián)網(wǎng)、智能家居等的投入和研發(fā)力度。同時,Cotco也積極拓展國際市場,與全球多個國家和地區(qū)的合作伙伴建立合作關(guān)系,推動產(chǎn)品的全球化銷售和服務(wù)。展望未來,Cotco將繼續(xù)秉承創(chuàng)新、質(zhì)量和服務(wù)的理念,致力于成為全球電子行業(yè)的佼佼者。
韓國三星電子(Samsung Electronics)在CMOS技術(shù)方面也取得了顯著成就。作為一家綜合性電子企業(yè),三星電子在CMOS技術(shù)研發(fā)方面投入了大量資金和人力資源。通過不斷的技術(shù)創(chuàng)新和生產(chǎn)優(yōu)化,三星電子成功推出了多款高性能、低功耗的CMOS芯片產(chǎn)品,廣泛應(yīng)用于智能手機、平板電腦等電子產(chǎn)品中。這些產(chǎn)品以其卓越的性能和出色的品質(zhì)贏得了市場的廣泛認(rèn)可,使三星電子在全球半導(dǎo)體市場上占據(jù)了一席之地。
在半導(dǎo)體行業(yè),產(chǎn)品質(zhì)量是企業(yè)生存和發(fā)展的關(guān)鍵。Excelics Semiconductor始終將品質(zhì)管理放在首位,建立了嚴(yán)格的質(zhì)量控制體系。他們通過引進(jìn)先進(jìn)的生產(chǎn)設(shè)備和技術(shù),確保每一片芯片都符合高標(biāo)準(zhǔn)的質(zhì)量要求。這種對品質(zhì)的執(zhí)著追求贏得了客戶的信任和市場的認(rèn)可。
2016年,F(xiàn)airchild Semiconductor被ON Semiconductor收購。這一收購標(biāo)志著Fairchild Semiconductor的發(fā)展進(jìn)入了一個新的階段。ON Semiconductor是一家全球領(lǐng)先的半導(dǎo)體公司,擁有廣泛的產(chǎn)品線和強大的技術(shù)實力。通過整合Fairchild Semiconductor的技術(shù)和資源,ON Semiconductor進(jìn)一步鞏固了其在半導(dǎo)體行業(yè)中的領(lǐng)導(dǎo)地位,并繼續(xù)為全球客戶提供優(yōu)質(zhì)的半導(dǎo)體產(chǎn)品和服務(wù)。
在立足臺灣市場的同時,兆欣也積極拓展海外市場。他們通過參加國際展會、與海外客戶建立合作關(guān)系等方式,成功將產(chǎn)品打入國際市場。特別是在亞洲地區(qū),兆欣的產(chǎn)品受到了廣泛歡迎和認(rèn)可。這種多元化的市場布局為公司的快速發(fā)展提供了有力支持。
面對制造業(yè)轉(zhuǎn)型升級的機遇和挑戰(zhàn),EUtech公司積極探索智能制造領(lǐng)域。他們引進(jìn)先進(jìn)的生產(chǎn)設(shè)備和自動化生產(chǎn)線,提高生產(chǎn)效率和質(zhì)量。同時,公司還注重人才培養(yǎng)和技術(shù)創(chuàng)新,打造了一支高素質(zhì)的研發(fā)團隊和技術(shù)工人隊伍。在智能制造的助力下,EUtech公司實現(xiàn)了從傳統(tǒng)制造向智能制造的轉(zhuǎn)型升級。
以上五個故事均基于EUtech Scientific Engineering公司的實際情況和電子行業(yè)的發(fā)展趨勢進(jìn)行虛構(gòu)。希望這些故事能夠為您提供一些啟示和參考。
我在深圳一家公司做PCB設(shè)計工程師,已有近6年P(guān)CB設(shè)計經(jīng)驗,大學(xué)本科。包括通信設(shè)備(1萬到2萬PIN的PCB)、 終端設(shè)備(無線路由器、貓等)。通信設(shè)備一般是8到16層PCB,終端設(shè)備一般在2到6層的PCB。 & ...… 查看全部問答∨ |
|
大家?guī)兔纯催@段關(guān)于偶校驗的代碼有什么問題,謝謝! #include <at89x52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define ERR 0; #define RIGHT 1; uchar idata sbuf; void send(unsigned idata receive); main(){ IE=0; &nbs ...… 查看全部問答∨ |
問一下有關(guān)千兆以太網(wǎng) auto-negotiation的問題 系統(tǒng)是X86的,目標(biāo)機是標(biāo)準(zhǔn)PC板,上面加載的是兩個82546網(wǎng)卡,以前在82541下能夠驅(qū)動網(wǎng)卡正常工作,但是現(xiàn)在換成82546卻出現(xiàn)miiPhy方面的問題 目前跟代碼發(fā)現(xiàn)是在運行miiAutoNegotiation時出現(xiàn)的問題,想請問各位達(dá)人。 關(guān)于如何在GMII下配置自動 ...… 查看全部問答∨ |
我看了一篇《ucos II+ucGUI+s3c2410+LCD+觸摸屏整合》后知道移植UCGUI需要修改的地方,但我不知道怎么樣把UCGUI加載到編譯器中呢?請高手指點一下。 … 查看全部問答∨ |
最近用PB編譯的時候總是出現(xiàn)nmake.exe出錯 重裝了N次PB,然后又重裝了N次系統(tǒng),問題依舊。我頂他個肺,快崩潰了。 nmake.exe遇到問題需要關(guān)閉 哪位有解決辦法?… 查看全部問答∨ |
呵呵 不好意思 今天在看到上個月有網(wǎng)友在我的貼里問我的點陣模擬時鐘程序是不是lpc1114,其實呢這個是lpc2148 的 是我畢業(yè)論文的一部分,其實的我的論文老師也要我發(fā)這個程序,等我整理好了發(fā)給我老師的時候如果網(wǎng)友還 有感興趣的,我再順便上傳一 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實惠套件和強大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- 汽車顯示屏——第1部分:TFT LCD、OLED和micro-LED顯示屏基本原理
- 英特爾首秀上海車展:以“芯”賦能,攜手合作伙伴推動全車智能化
- 中國首個高速L3商用解決方案!華為新一代ADS 4正式發(fā)布
- 增強自主移動機器人的安全性
- Cadence 推出業(yè)界首款 12800MT/s DDR5 MRDIMM Gen2 內(nèi)存 IP 系統(tǒng)解決方案
- 消息稱英特爾本周內(nèi)公布 20%+ 大裁員計劃
- 盤點慕尼黑電子展上那些火熱的機器人技術(shù)和產(chǎn)品
- AI算力狂飆下的能源困局,ST如何突圍?
- 韓國研究人員開發(fā)出耐火電池電解質(zhì)以防止熱失控
- “史上最嚴(yán)電池安全令”或引發(fā)產(chǎn)業(yè)第四次大洗牌
- 試用Vishay新型“IHLP磁芯損耗計算器”,搶樓贏好禮
- LPC4370重磅來襲 有獎問答贏好禮!
- 電子工程師,如何更好地?fù)肀aN?參與問卷有好禮!
- 報名贏京東卡 | 國產(chǎn)FPGA安路科技2024線上新品發(fā)布會
- 兆易GD32450I-EVAL免費測評試用
- 追更有驚喜:解救被FSM折磨過的你,justd0解析LSM6DSOX有限狀態(tài)機官方例程
- 電路圖站2.0版上線,公開征集網(wǎng)友建議,填寫調(diào)查問卷贏積分!
- 全球首款Cortex-M23內(nèi)核物聯(lián)網(wǎng)芯片SAML10和SAM L11系列 闖關(guān)獲取SAML10/SAML11法寶,拆除電子界安全危機,贏好禮!
- 邀請好友體驗WEBENCH,禮品豐厚你有他也有!
- Hyperstone引入用例追蹤器來優(yōu)化NAND閃存的配置和管理
- STM32學(xué)習(xí)筆記-配置串口,printf重定向
- STM32學(xué)習(xí)筆記-ADC采集-串口2發(fā)送至上位機
- ‘百通車聯(lián)’為車聯(lián)網(wǎng)產(chǎn)業(yè)提供一站式測試認(rèn)證解決方案
- STM32學(xué)習(xí)筆記-pwm生成-舵機控制
- 物聯(lián)網(wǎng)科技擴散效應(yīng) 以制造業(yè)受惠最多
- 蘋果新版macOS又出漏洞:任意密碼可解鎖App Store設(shè)置
- 蘋果西班牙零售店發(fā)生iPhone電池爆炸 兩天內(nèi)第二起
- 蘋果因“降速門”面臨30起集體訴訟 被指控侵犯“動產(chǎn)
- iPhone降速門負(fù)面驚動美方上層:不好收場