新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51單片機RTL8019AS的網卡驅動程序

        基于51單片機RTL8019AS的網卡驅動程序

        作者: 時間:2012-01-20 來源:網絡 收藏

        MAC地址不是隨便定義的,它的組成結構如圖9所示。以太網的地址為48位,由ieee統一分配給制造商,每個的地址都必須是全球唯一的。共6個字節的長度。FF:FF:FF:FF:FF:FF為廣播地址,只能用在目的地址段,不能作為源地址段。目的地址為廣播地址的數據包,可以被一個局域網內的所有網卡接收到。合法的以太網地址第32位組播標志必須為0。例如:

        本文引用地址:http://www.104case.com/article/172229.htm

          X0:XX:XX:XX:XX:XX

          X2:XX:XX:XX:XX:XX

          X4:XX:XX:XX:XX:XX

          X6:XX:XX:XX:XX:XX

          X8:XX:XX:XX:XX:XX

          XA:XX:XX:XX:XX:XX

          XC:XX:XX:XX:XX:XX

          XE:XX:XX:XX:XX:XX

          為合法以太網地址。上面的X代表0-F中的任一個。

          地址

          X1:XX:XX:XX:XX:XX

          X3:XX:XX:XX:XX:XX

          X5:XX:XX:XX:XX:XX

          X7:XX:XX:XX:XX:XX

          X9:XX:XX:XX:XX:XX

          XB:XX:XX:XX:XX:XX

          XD:XX:XX:XX:XX:XX

          XF:XX:XX:XX:XX:XX

          為組播地址,只能作為目的地址,不能作為源地址。組播地址可以被支持該組播地址的一組網卡接收到。組播地址主要用在視頻廣播,遠程喚醒(通過發一個特殊的數據包使網卡產生一個中斷信號,啟動電腦),游戲(多個人在局域網里聯機打游戲)里等。

          以下是一些具體的組播地址:

          地址范圍

          01:00:5E:00:00:00---01:00:5E:7F:FF:FF 用于ip地址的組播,其他組播地址跟tcp/ip無關,不做介紹。

          網卡可以接收以下3種地址的數據包:

          第一種 目的地址跟自己的網卡地址是一樣的數據包;

          第二種 目的地址為FF:FF:FF:FF:FF:FF廣播地址的數據包;

          第三種 目的地址為跟自己的組播地址范圍相同的數據包。

          在以太網的應用當中,如果你希望你的數據包只發給一個網卡,目的地址用對方的網卡地址;

          如果你想把數據包發給所有的網卡,目的地址用廣播地址;

          如果你想把數據包發給一組網卡,目的地址用組播地址。

          其他用到的寄存器:

          CR---命令寄存器 TSR---發送狀態寄存器 ISR---中斷狀態寄存器

          RSR---接收狀態寄存器 RCR---接收配置寄存器 TCR---發送配置寄存器

          DCR---數據配置寄存器 IMR---中斷屏蔽寄存器 NCR---包發送期間碰撞次數

          FIFO---環回檢測后,查看FIFO內容

          CNTR0---幀同步錯總計數器

          CNTR1---CRC錯總計數器

          CNTR2---丟包總計數器

          PAR0-5---本節點MAC地址

          MAR0-7---多播地址匹配

          建議:將圖形中寄存器名稱標注上頁號和地址偏移(如:BNRY 0頁0x03),打印出此圖,看圖編程,直觀且不容易出錯。

          備注:收緩沖區、發緩沖區、數據存儲區在16K雙口RAM里的安排由用戶自行決定,只要不引起沖突即可,以下源程序代碼實現的只是其中的一種分配方案。

          部分源程序清單:

          struct ethernet{

          unsigned char status; //接收狀態

          unsigned char nextpage; //下一個頁

          unsigned int length; //以太網長度,以字節為單位

          unsigned int destnodeid[3]; //目的網卡地址

          unsigned int sourcenodeid[3]; //源網卡地址

          unsigned int protocal; //下一層協議

          unsigned char packet[1500]; //包的內容

          };

          void ne2000init()//ne2000網卡初始化

          {

          rtl8019as_rst();

          reg00=0x21; //選擇頁0的寄存器,網卡停止運行,因為還沒有初始化。

          delay_ms(10); //延時10毫秒,確保芯片進入停止模式

          //使芯片處于mon和loopback模式,跟外部網絡斷開



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 瑞金市| 包头市| 金溪县| 柳林县| 陆川县| 石屏县| 东源县| 依安县| 大冶市| 郴州市| 陆川县| 白城市| 顺平县| 凤冈县| 西乌珠穆沁旗| 三台县| 苏尼特左旗| 武宁县| 满城县| 綦江县| 怀柔区| 辰溪县| 凤山市| 长乐市| 仁寿县| 昆明市| 康马县| 太谷县| 宁城县| 彰武县| 如皋市| 湛江市| 老河口市| 新宁县| 宁阳县| 枝江市| 多伦县| 囊谦县| 龙海市| 隆化县| 鄢陵县|