找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16064|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

以太網(wǎng)MAC調(diào)試感想

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:60076 發(fā)表于 2014-4-10 21:39 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
經(jīng)過一個月的時間,初步能夠建立一個簡單的UDP服務(wù)器。所用芯片為STM32F107,板上自帶MAC,需要自帶PHY ,所用PHY為dp83848 。前面沒有用到官方庫, 程序思路 ,首先為時鐘的初始化,STM32主要有四個時鐘,內(nèi)部高速時鐘,外部高速時鐘,內(nèi)部低速時鐘,外部低速時鐘,通過對其倍頻,分頻給各個模塊提供時鐘信號,內(nèi)部主要有PLL時鐘,AHB時鐘,APB1,APB2時鐘,SYSCLK時鐘,APB1最大時鐘只有36MHZ,APB2可以72MHZ為STM32F107 所用I/O的初始化,管腳復(fù)用初始化,然后時鐘使能。在這所遇到的問題主要是STM32F107有些寄存器的復(fù)位值居然不是從零開始.以太網(wǎng)MAC協(xié)議主要有RMII 和MII模式,兩者的區(qū)別主要在于管腳和MCO 時鐘頻率的區(qū)別。MCO時鐘在RMII需要50MHZ,在這里通過PLL3 10倍頻獲得,因?yàn)樵跁r鐘初始化之后PLL3的頻率為5MHZ,在MII模式下 如果外部時鐘用25MHZ可以直接為MCO輸出25MHZ,提供時鐘源。對DP83848的寄存器進(jìn)行操作 主要通過SMI接口操作,SMI接口有兩跟線分別為MDC和MDIO MDC的時鐘源根據(jù)AHB總線的時鐘源分頻所得。然后ETH的寄存器初始化發(fā)送DMA寄存器初始化 ,ETH接受中斷使能,DMA中斷使能。。。。這里比較難理解 ,而且寄存器很難配置。我直接用官方的程序了。接下來就是移植LWIP 協(xié)議棧了。
LWIP 協(xié)議棧在裸機(jī)跑的時候,主要 包括 CC.H 中的數(shù)據(jù)類型定義 大小端定義(根據(jù)編譯器和處理器特性)臨界代碼的保護(hù) lwipopts.h 對協(xié)議棧內(nèi)核的參數(shù)配置 默認(rèn)的在OPT.H中, 最后就是對etnernetif.C中的計(jì)個函數(shù)的編寫。low-level-init 主要為網(wǎng)卡的初始化和網(wǎng)絡(luò)接口的初始化low-level-input 從網(wǎng)卡中得到一個數(shù)據(jù)包然后上傳到協(xié)議棧里中,low-level-output 把內(nèi)核中的PBUF所描述的數(shù)據(jù)發(fā)出去。
這樣 在主函數(shù)中加上 LWIP 初始化,主要是網(wǎng)絡(luò)接口 IP .MAC 初始化, 通過STM32的滴答計(jì)時器 定個基準(zhǔn)時間 然后加上TCP定時處理函數(shù)和ARP定時處理函數(shù)就能簡單的PING 通了。 PING 大包 ping不通 通過抓包軟件看見 STM32  回應(yīng)ICMP包 可是為什么PING 不通呢,主要原因在于STM32有硬件校驗(yàn)和功能 在發(fā)送字節(jié)大于一個以太網(wǎng)幀的時候,IP層為分片發(fā)送 而硬件校驗(yàn)和 自動加上校驗(yàn)和導(dǎo)致 校驗(yàn)和錯誤 PC機(jī)端認(rèn)為是錯誤的數(shù)據(jù)直接丟棄了。現(xiàn)在只能關(guān)閉硬件校驗(yàn)和功能,其他方法還沒想到。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:65595 發(fā)表于 2014-8-30 06:39 | 只看該作者
你好!請教一下,我這邊的用STM32F207+DP83640做網(wǎng)絡(luò)通信,現(xiàn)在DP83640工作,但STM32的MDC沒有輸出25M的時鐘,原因是什么?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表