電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 47|回復(fù): 0
收起左側(cè)

STM32F103驅(qū)動ENC28J60實(shí)現(xiàn)裸機(jī)TCP/UDP通信方案

[復(fù)制鏈接]

544

主題

544

帖子

3210

積分

四級會員

Rank: 4

積分
3210
跳轉(zhuǎn)到指定樓層
樓主

) y3 w* t/ m& Z* s5 }/ J點(diǎn)擊上方藍(lán)色字體,關(guān)注我們5 j5 R: J3 n- J1 I1 s: ?
來源于粉絲提問。
- Y& L, o' b/ [' k  x
, p% A0 B. b  n/ p* G
9 M' M" {$ i% m& Y. Q3 C9 u$ |1 k7 y1 \& y  {, Q( N) }9 e5 x$ x
這位朋友的項目中采用了STM32F103芯片和ENC28J60網(wǎng)絡(luò)適配器,通過SPI實(shí)現(xiàn)通信,目標(biāo)是開發(fā)不依賴OS的裸機(jī)程序,實(shí)現(xiàn)TCP和UDP協(xié)議的支持。6 [0 L* f- V) s1 `% ~9 H$ \8 m
7 {& W- O" k, `$ R' S# H
先說結(jié)論:HAL庫不直接支持TCP/IP協(xié)議,因此需引入其他協(xié)議棧。$ L; Y' T+ u; P/ K6 e
1
4 }  [) m; W" t  B1 U7 g問題 1:HAL庫是否支持TCP/IP?
9 ]. h! T. e$ V0 L" D/ OSTM32的HAL庫本身不直接支持TCP/IP協(xié)議。HAL庫主要提供對STM32芯片外設(shè)(如GPIO、SPI、UART等)的基礎(chǔ)控制接口,而不包含任何網(wǎng)絡(luò)協(xié)議棧實(shí)現(xiàn),因此無法直接用于TCP/IP通信。" E0 T* e0 d+ Q: G$ ]: v
3 ~1 C& I( \4 r$ }: ]" |
HAL庫的職責(zé)在于硬件層面上提供一種通用的、方便的硬件訪問方法,但它并不涉及較高級別的通信協(xié)議,比如TCP/IP。( r- o4 g. ^* m
2
: q) h- c0 x0 d! B2 G4 k問題 2:如果HAL不支持TCP/IP,那么用什么實(shí)現(xiàn)?5 ]% N( P9 m9 |+ c$ o! R
由于HAL庫不支持TCP/IP協(xié)議,您需要引入一個適用于裸機(jī)環(huán)境的TCP/IP協(xié)議棧。以下是幾種常用方法:# U; o6 Y# Z4 o( j
& q8 I3 v4 L6 t  G
lwIP(Lightweight IP)協(xié)議棧
6 t- @# y3 g3 H3 M& B6 y
) ]8 x2 Z1 }$ A: Y& S( ]4 I
  • 優(yōu)點(diǎn):相對成熟,文檔豐富,易于移植;開源,社區(qū)支持度高。
  • 缺點(diǎn):內(nèi)存占用相對較大(對于STM32F103的20KB SRAM需嚴(yán)格優(yōu)化),配置相對復(fù)雜。
  • 簡介:lwIP是一款開源、輕量級的TCP/IP協(xié)議棧,設(shè)計專注于資源受限的嵌入式系統(tǒng)。它支持TCP、UDP、ICMP等基本協(xié)議,是很多嵌入式網(wǎng)絡(luò)開發(fā)的首選。
  • 適用性:lwIP可以在裸機(jī)模式下運(yùn)行,并且已經(jīng)被廣泛用于STM32平臺中。其架構(gòu)模塊化,允許選擇性的編譯和裁剪,使得它可以適應(yīng)STM32F103這種資源有限的芯片。
  • 與ENC28J60適配:lwIP本身不直接支持ENC28J60,因此需要實(shí)現(xiàn)一個網(wǎng)卡驅(qū)動,將ENC28J60通過SPI接口接入到lwIP中。這需要在lwIP配置中定義ENC28J60的SPI驅(qū)動,主要包括發(fā)送、接收、初始化等函數(shù)的實(shí)現(xiàn)。
    ( I( ~& j3 [6 _# `4 y4 r& N
    [/ol]6 ~0 T7 U+ ]; t

    . Z% n$ j6 f( B& YuIP協(xié)議棧
    ; J+ @& n. K6 O: K
    ; B  Y8 u& L$ t7 {- |
  • 優(yōu)點(diǎn):內(nèi)存占用極低,代碼量少,便于移植。
  • 缺點(diǎn):不支持多連接,協(xié)議實(shí)現(xiàn)較為簡化,性能較低,主要適用于低速率、單連接的簡單應(yīng)用。
  • 簡介:uIP是由Adam Dunkels開發(fā)的極簡TCP/IP協(xié)議棧,專為低內(nèi)存的嵌入式系統(tǒng)設(shè)計,目標(biāo)是在幾KB的RAM中實(shí)現(xiàn)基本的TCP/IP功能。
  • 適用性:uIP的代碼量更小,占用的內(nèi)存和計算資源少,非常適合STM32F103這種RAM有限的環(huán)境。
  • 與ENC28J60適配:由于uIP體積小巧,通常需要自行編寫與ENC28J60的驅(qū)動接口代碼。
  • 和lwIP類似,需要編寫ENC28J60的SPI驅(qū)動層,實(shí)現(xiàn)uIP的接口。
    0 o' \+ b% r/ }& N( g! P
    [/ol]$ v6 y$ C9 E: C8 j! h7 H7 ^7 q
    ! x$ J  c& W$ C6 `6 t
    自定義輕量級TCP/IP協(xié)議棧
    / n5 r% S9 ]* u+ z& J; w0 G8 n# e. n, L+ _0 |% @
  • 優(yōu)點(diǎn):極大地節(jié)省內(nèi)存和資源,簡化特定功能的實(shí)現(xiàn)。
  • 缺點(diǎn):開發(fā)周期長,維護(hù)困難,不適合較為復(fù)雜的網(wǎng)絡(luò)通信需求。
  • 簡介:針對非常特殊的應(yīng)用場景,可以選擇編寫一個定制的、極簡TCP/IP協(xié)議棧,專注于特定的功能(例如僅支持UDP或僅支持單連接的TCP)。
  • 適用性:在內(nèi)存極其緊張的情況下,可以手動編寫僅包含所需功能的簡單協(xié)議棧。
  • 與ENC28J60適配:這種方式需要完整的驅(qū)動和協(xié)議棧的實(shí)現(xiàn),并非通用方案,因此通常不建議初次嘗試網(wǎng)絡(luò)編程時使用。
    2 E, t7 c: R. d2 q' K  _; m  Z
    [/ol]
    3 }( R- h7 W3 U% Z2 I9 ]$ o38 V3 p) s4 N" A/ v. R
    具體實(shí)現(xiàn)建議. ?( g& E) S3 Z% f
    推薦方法
    - E! S$ [" e- i" ?- {% |0 t; x0 D7 J" E6 I% b2 S
    基于STM32F103的資源限制,lwIP是較為合適的選擇,但需要對配置進(jìn)行裁剪,關(guān)閉不必要的功能(如DNS、DHCP等),以減小內(nèi)存占用。
    1 F8 {6 b8 X7 t% d4 O
    , Q: D' z  z, v- h- k同時,需自行實(shí)現(xiàn)ENC28J60的驅(qū)動代碼,建立SPI接口通信,確保數(shù)據(jù)收發(fā)的效率和穩(wěn)定性。
    0 S- P2 C! m, z) t
    / ~( @. u' t, r5 B  c
    9 G3 U5 C* `3 E- r% W5 J
    調(diào)試工具
    4 P. y. l) N- h1 n" d" e1 S
    7 V6 Z9 o+ x% o" P4 V在開發(fā)和調(diào)試過程中,“網(wǎng)絡(luò)調(diào)試助手”可以用于PC端測試下位機(jī)的TCP和UDP通信。# a# C4 F; M3 B0 m, f, l, I
    , `, u, g2 _# c, d4 x# A: r9 }, `
    可以通過這種方式測試lwIP或uIP棧的通信穩(wěn)定性、數(shù)據(jù)吞吐量,并確保下位機(jī)的響應(yīng)符合預(yù)期。
    + M$ K2 v6 t- j; k( p0 X$ w, ^
    , K7 E6 G/ U9 s4 f0 |2 c! r
    " w- W5 m+ P* l9 t# y ! [9 v. M' K8 Y) Y
    點(diǎn)擊閱讀原文,更精彩~
  • 回復(fù)

    使用道具 舉報

    發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則

    關(guān)閉

    站長推薦上一條 /1 下一條


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表