www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 1.前言(2013年初整理筆記,2013底發(fā)布至CSDN博客中)嵌入式以太網(wǎng)開(kāi)發(fā)是一個(gè)很有挑戰(zhàn)性的工作。通過(guò)幾個(gè)月的學(xué)習(xí),個(gè)人覺(jué)得大致有兩條途徑。第一條途徑,通過(guò)高級(jí)語(yǔ)言熟悉socket編程,例如C#或C++,熟

1.前言

(2013年初整理筆記,2013底發(fā)布至CSDN博客中)


嵌入式以太網(wǎng)開(kāi)發(fā)是一個(gè)很有挑戰(zhàn)性的工作。通過(guò)幾個(gè)月的學(xué)習(xí),個(gè)人覺(jué)得大致有兩條途徑。第一條途徑,通過(guò)高級(jí)語(yǔ)言熟悉socket編程,例如C#或C++,熟悉bind,listen,connect,accept等函數(shù),在嵌入式系統(tǒng)中應(yīng)用 lwIP協(xié)議棧。第二種途徑,通過(guò)分析嵌入式以太網(wǎng)代碼,結(jié)合TCPIP協(xié)議棧規(guī)范逐步實(shí)踐協(xié)議棧代碼。第一種途徑效率高,開(kāi)發(fā)周期短,編寫(xiě)出來(lái)的代碼性能穩(wěn)定,第二種途徑花的時(shí)間長(zhǎng),開(kāi)發(fā)出來(lái)的代碼功能不完善,但是由于緊緊結(jié)合TCPIP規(guī)范,可以了解的內(nèi)容較多,適合學(xué)習(xí)。本文通過(guò)分析和修改AVRNET源碼并移植到STM32平臺(tái),逐步實(shí)現(xiàn)TCPIP協(xié)議棧的各個(gè)子部分,包括ETHERNET部分,ARP部分,IP部分,ICMP部分,UDP部分,TCP部分和HTTP部分。

STM32NET學(xué)習(xí)筆記——索引】【代碼倉(cāng)庫(kù)】

本文先實(shí)現(xiàn)ethernet部分和ARP部分。

1.2 其他說(shuō)明

【硬件平臺(tái)】 STM32+ENC28J60

【編譯平臺(tái)】 IAR 6.5

【IP地址】在實(shí)踐之前,需要通過(guò)ipconfig命令查看PC機(jī)的IP地址和MAC地址,AVR的IP地址設(shè)定必須和PC機(jī)在同一個(gè)網(wǎng)段中。例如 :

PC機(jī)IP:192.168.1.102

AVR IP: 192.168.1.115

【局域網(wǎng)訪問(wèn) 】

如果有STM32開(kāi)發(fā)板或者其他CPU的開(kāi)發(fā)板的話,可以把開(kāi)發(fā)板的以太網(wǎng)端口連接到路由器LAN端口,只要保證開(kāi)發(fā)板的IP地址和PC機(jī)的IP地址在同一個(gè)網(wǎng)段。

【廣域網(wǎng)訪問(wèn) 】

如果有固定的電信網(wǎng)IP地址的話,可以在路由器中設(shè)置靜態(tài)端口映射,把某個(gè)端口映射成局域網(wǎng)內(nèi)的IP地址和端口號(hào)。若沒(méi)有固定IP地址的話,可使用花生殼軟件虛擬一個(gè)域名。

1.3 代碼倉(cāng)庫(kù)


【代碼倉(cāng)庫(kù)】——CSDN Code代碼倉(cāng)庫(kù)。



2.初始化

以太網(wǎng)協(xié)議棧的實(shí)現(xiàn)離不開(kāi)以太網(wǎng)驅(qū)動(dòng)芯片。以太網(wǎng)驅(qū)動(dòng)如何實(shí)現(xiàn)請(qǐng)參考——ENC28J60學(xué)習(xí)筆記。TCPIP的實(shí)現(xiàn)離不開(kāi)兩個(gè)基本地址,IP地址和MAC地址。在本例中通過(guò)以下代碼定義和實(shí)現(xiàn)。

struct.h頭文件中 相關(guān)定義:


  1. //MAC地址結(jié)構(gòu)體

  2. #pragmapack(1)

  3. typedefstruct_MAC_ADDR

  4. {

  5. BYTEbyte[6];

  6. }MAC_ADDR;

  7. //IP地址結(jié)構(gòu)體

  8. #pragmapack(1)

  9. typedefstruct_IP_ADDR

  10. {

  11. BYTEbyte[4];

  12. }IP_ADDR;

main.c函數(shù)中的初始化代碼:


  1. //初始化MAC地址

  2. stm32_mac.byte[0]='S';

  3. stm32_mac.byte[1]='T';

  4. stm32_mac.byte[2]='M';

  5. stm32_mac.byte[3]='N';

  6. stm32_mac.byte[4]='E';

  7. stm32_mac.byte[5]='T';

  8. //初始化IP地址,固定IP地址

  9. stm32_ip.byte[0]=192;

  10. stm32_ip.byte[1]=168;

  11. stm32_ip.byte[2]=1;

  12. stm32_ip.byte[3]=115;

MAC地址和IP地址均為自定義的結(jié)構(gòu)體,結(jié)構(gòu)體中為一個(gè)字節(jié)數(shù)組。嚴(yán)格來(lái)說(shuō),MAC地址不能胡亂定義,應(yīng)嚴(yán)格遵守相關(guān)規(guī)范,如果條件允許的話可以使用帶有全球唯一的MAC地址的EEPROM芯片。

3.實(shí)現(xiàn)ETHERNET

TCPIP是一系列協(xié)議的組合,其中最有名的為T(mén)CP協(xié)議和IP協(xié)議。但是千萬(wàn)不要忽視最底層的協(xié)議結(jié)構(gòu)——ETHERNET。ETHERNET包括14個(gè)字節(jié),稱之為以太網(wǎng)首部,其中前六個(gè)字節(jié)為目標(biāo)MAC地址,緊著的6個(gè)字節(jié)為源MAC地址,最后的兩個(gè)字節(jié)為協(xié)議類(lèi)型。以太網(wǎng)的實(shí)現(xiàn)通信時(shí)必須要知道雙方的MAC地址,發(fā)送方不明確接收方的地址便通過(guò)ARP協(xié)議尋找目標(biāo)MAC地址,如果依然沒(méi)有結(jié)果則可只能把該報(bào)文轉(zhuǎn)發(fā)給路由器,讓路由器處理該報(bào)文。協(xié)議類(lèi)型只需關(guān)心兩種,0800的IP協(xié)議和0806的ARP協(xié)議。

ethernet.h中相關(guān)宏定義


  1. //協(xié)議類(lèi)型ARP報(bào)文

  2. #defineETH_TYPE_ARP_V0x0806

  3. #defineETH_TYPE_ARP_H_V0x08

  4. #defineETH_TYPE_ARP_L_V0x06

  5. //協(xié)議類(lèi)型以太網(wǎng)報(bào)文

  6. #defineETH_TYPE_IP_V0x0800

  7. #defineETH_TYPE_IP_H_V0x08

  8. #defineETH_TYPE_IP_L_V0x00

  9. //以太網(wǎng)報(bào)文頭部長(zhǎng)度14

  10. #defineETH_HEADER_LEN14

  11. //目標(biāo)MAC地址

  12. #defineETH_DST_MAC_P0

  13. //源MAC地址

  14. #defineETH_SRC_MAC_P6

  15. //協(xié)議類(lèi)型

  16. #defineETH_TYPE_H_P12

  17. #defineETH_TYPE_L_P13

ethernet.c中相關(guān)函數(shù)

[cpp]view plaincopy

  1. voideth_generate_header(BYTE*rxtx_buffer,WORD_BYTEStype,BYTE*dest_mac)

  2. {

  3. BYTEi;

  4. //配置以太網(wǎng)報(bào)文目標(biāo)MAC地址和源MAC地址

  5. for(i=0;i

  6. {

  7. rxtx_buffer[ETH_DST_MAC_P+i]=dest_mac[i];

  8. //avr_mac為全局變量

  9. rxtx_buffer[ETH_SRC_MAC_P+i]=stm32_mac.byte[i];

  10. }

  11. //配置協(xié)議類(lèi)型IP報(bào)文或ARP報(bào)文

  12. rxtx_buffer[ETH_TYPE_H_P]=type.byte.high;

  13. rxtx_buffer[ETH_TYPE_L_P]=type.byte.low;

  14. }

eth_generate_header函數(shù)實(shí)現(xiàn)了填充以太網(wǎng)首部的功能,第一個(gè)輸入?yún)?shù)為發(fā)送接收緩沖區(qū)。第二個(gè)參數(shù)為IP類(lèi)型,在AVRNET項(xiàng)目中傳入的參數(shù)不是0800的IP協(xié)議類(lèi)型就是0806的ARP協(xié)議類(lèi)型。第三個(gè)參數(shù)為目標(biāo)MAC地址,由于本機(jī)MAC地址作為了全局變量,可以在函數(shù)內(nèi)部填充到緩沖區(qū)中。

4.實(shí)現(xiàn)ARP

為了使用最少的代碼實(shí)現(xiàn)TCPIP功能,假設(shè)通過(guò)IP發(fā)送報(bào)文時(shí)已經(jīng)確認(rèn)了目標(biāo)的IP地址,設(shè)備總是先被動(dòng)的通過(guò)ARP先讓PC機(jī)知道其MAC地址,這樣當(dāng)PC機(jī)發(fā)送UDP或者TCP報(bào)文時(shí),在報(bào)文中已經(jīng)包含了PC機(jī)的IP地址,設(shè)備僅需從rxtx_buffer中取出PC機(jī)IP地址。ARP協(xié)議是一個(gè)找鄰居的過(guò)程,是一個(gè)廣播找MAC的過(guò)程。發(fā)出者通過(guò)廣播報(bào)文確認(rèn)某個(gè)IP的MAC地址。ARP首部包括,2字節(jié)硬件類(lèi)型,2字節(jié)協(xié)議類(lèi)型,1字節(jié)硬件長(zhǎng)度,1字節(jié)協(xié)議長(zhǎng)度,2字節(jié)操作碼,6字節(jié)發(fā)送者硬件地址,4字節(jié)發(fā)送者IP地址,6字節(jié)目標(biāo)硬件地址和4字節(jié)目標(biāo)IP地址。

在使用ARP協(xié)議時(shí)需要注意三點(diǎn):

第一,操作碼分為兩種——ARP請(qǐng)求和ARP響應(yīng),ARP請(qǐng)求的編碼為1,ARP響應(yīng)的編碼為2,先有請(qǐng)求后有響應(yīng)。第二,發(fā)送ARP協(xié)議請(qǐng)求時(shí)請(qǐng)求方明確對(duì)方IP地址,但是不明確對(duì)方MAC地址,所以在請(qǐng)求報(bào)文中MAC地址全部以0替代。第三,由于不知道對(duì)方的MAC地址,所以只能通過(guò)廣播幀發(fā)送以太網(wǎng)數(shù)據(jù),所以以太網(wǎng)首部的前6個(gè)字節(jié)被FF填充。

為了便于ARP功能的實(shí)現(xiàn),在arp.h文件中定義了以下宏定義


  1. #defineARP_PACKET_LEN28

  2. //ARP請(qǐng)求

  3. #defineARP_OPCODE_REQUEST_V0x0001

  4. #defineARP_OPCODE_REQUEST_H_V0x00

  5. #defineARP_OPCODE_REQUEST_L_V0x01

  6. //ARP響應(yīng)

  7. #defineARP_OPCODE_REPLY_V0x0002

  8. #defineARP_OPCODE_REPLY_H_V0x00

  9. #defineARP_OPCODE_REPLY_L_V0x02

  10. //硬件類(lèi)型10M以太網(wǎng)

  11. #defineARP_HARDWARE_TYPE_H_V0x00

  12. #defineARP_HARDWARE_TYPE_L_V0x01

  13. //協(xié)議類(lèi)型IPV4

  14. #defineARP_PROTOCOL_H_V0x08

  15. #defineARP_PROTOCOL_L_V0x00

  16. //硬件地址長(zhǎng)度

  17. #defineARP_HARDWARE_SIZE_V0x06

  18. //協(xié)議地址長(zhǎng)度

  19. #defineARP_PROTOCOL_SIZE_V0x04

  20. //硬件類(lèi)型2字節(jié)

  21. #defineARP_HARDWARE_TYPE_H_P0x0E

  22. #defineARP_HARDWARE_TYPE_L_P0x0F

  23. //協(xié)議類(lèi)型2字節(jié)

  24. #defineARP_PROTOCOL_H_P0x10

  25. #defineARP_PROTOCOL_L_P0x11

  26. //硬件地址1字節(jié)

  27. #defineARP_HARDWARE_SIZE_P0x12

  28. //協(xié)議地址長(zhǎng)度1字節(jié)

  29. #defineARP_PROTOCOL_SIZE_P0x13

  30. //操作碼2字節(jié)

  31. #defineARP_OPCODE_H_P0x14

  32. #defineARP_OPCODE_L_P0x15

  33. //發(fā)送者硬件地址6字節(jié)

  34. #defineARP_SRC_MAC_P0x16

  35. //發(fā)送者IP地址4字節(jié)

  36. #defineARP_SRC_IP_P0x1C

  37. //目標(biāo)硬件地址6字節(jié)

  38. #defineARP_DST_MAC_P0x20

  39. //目標(biāo)IP地址6字節(jié)

  40. #defineARP_DST_IP_P0x26

在沒(méi)有操作系統(tǒng)的支持下,一般通過(guò)一個(gè)無(wú)限循環(huán)實(shí)現(xiàn)子功能的實(shí)現(xiàn)。項(xiàng)目中通過(guò)某個(gè)process不斷查詢是否存在網(wǎng)卡數(shù)據(jù),如果有網(wǎng)卡數(shù)據(jù)則立刻保存源MAC地址。因?yàn)轫?xiàng)目中沒(méi)有維護(hù)ARP表,所

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

Sept. 8, 2025 ---- 根據(jù)TrendForce集邦咨詢最新調(diào)查,2025年第二季NVIDIA(英偉達(dá)) Blackwell平臺(tái)規(guī)?;鲐洠约氨泵繡SP業(yè)者持續(xù)擴(kuò)大布局General Server(通用型...

關(guān)鍵字: SSD DDR4 服務(wù)器

Sept. 4, 2025 ---- Apple(蘋(píng)果)即將發(fā)布iPhone 17、iPhone 17 Air(暫名)、iPhone 17 Pro及Pro Max四款旗艦新機(jī),除了外觀辨識(shí)度升級(jí),處理器性能、散熱和拍攝功...

關(guān)鍵字: iPhone 16 A19處理器 折疊機(jī)

Sept. 3, 2025 ---- 根據(jù)TrendForce集邦咨詢最新發(fā)布的《2025近眼顯示市場(chǎng)趨勢(shì)與技術(shù)分析》報(bào)告,2025年隨著國(guó)際品牌陸續(xù)推出AR眼鏡原型,以及Meta預(yù)計(jì)在近期發(fā)布AR眼鏡Celeste,市...

關(guān)鍵字: AR眼鏡 OLED

Sept. 2, 2025 ---- TrendForce集邦咨詢表示,2025年第二季DRAM產(chǎn)業(yè)因一般型DRAM (Conventional DRAM)合約價(jià)上漲、出貨量顯著增長(zhǎng),加上HBM出貨規(guī)模擴(kuò)張,整體營(yíng)收為3...

關(guān)鍵字: DRAM 智能手機(jī) ASP

Sept. 1, 2025 ---- 根據(jù)TrendForce集邦咨詢最新調(diào)查,2025年第二季因中國(guó)市場(chǎng)消費(fèi)補(bǔ)貼引發(fā)的提前備貨效應(yīng),以及下半年智能手機(jī)、筆電/PC、Server新品所需帶動(dòng),整體晶圓代工產(chǎn)能利用率與出貨...

關(guān)鍵字: 晶圓代工 智能手機(jī) 筆電

Aug. 28, 2025 ---- 根據(jù)TrendForce集邦咨詢最新調(diào)查,2025年第二季NAND Flash產(chǎn)業(yè)雖面臨平均銷(xiāo)售價(jià)格(ASP)小幅下滑,所幸原廠減產(chǎn)策略緩解供需失衡,疊加中、美兩大市場(chǎng)政策推動(dòng),整體...

關(guān)鍵字: NAND Flash SSD AI

Aug. 26, 2025 ---- NVIDIA(英偉達(dá))近日推出的Jetson Thor被視為機(jī)器人的物理智慧核心,以Blackwell GPU、128 GB記憶體堆疊出2070 FP4 TFLOPS AI算力,是前...

關(guān)鍵字: 機(jī)器人 大型語(yǔ)言模型 AI算力

Aug. 21, 2025 ---- 根據(jù)TrendForce集邦咨詢最新液冷產(chǎn)業(yè)研究,隨著NVIDIA GB200 NVL72機(jī)柜式服務(wù)器于2025年放量出貨,云端業(yè)者加速升級(jí)AI數(shù)據(jù)中心架構(gòu),促使液冷技術(shù)從早期試點(diǎn)邁...

關(guān)鍵字: AI 數(shù)據(jù)中心 服務(wù)器

除了充電電路外,鋰電池的放電過(guò)程也需要保護(hù)。鋰電池的放電電壓不能低于3.0V,否則電池壽命會(huì)大幅縮短。為了實(shí)現(xiàn)這一保護(hù),工程師們?cè)O(shè)計(jì)了DW01芯片與8205 MOS管的電路組合。DW01芯片能夠監(jiān)控鋰電池的放電電壓和電流...

關(guān)鍵字: 鋰電池 電池

在PCB設(shè)計(jì)的宏偉藍(lán)圖中,布局與布線規(guī)則猶如精密樂(lè)章中的指揮棒,是鑄就電路板卓越性能、堅(jiān)不可摧的可靠性及經(jīng)濟(jì)高效的制造成本的靈魂所在。恰如一位巧手的園藝師,合理的布局藝術(shù)性地編排著每一寸空間,既削減了布線交織的繁復(fù)迷宮,...

關(guān)鍵字: PCB 電路板
關(guān)閉