估計說起以太網(wǎng)半雙工,很多人快遺忘了,說了你不信,我們最近用起了以太網(wǎng)半雙工,說到底為了節(jié)省成本,由于通訊機制簡單,是個獨立網(wǎng)絡,用簡單的HUB代替了小型網(wǎng)關(guān)需要的交換機芯片。
GD32F450的半雙工模式下可以選擇是否進行沖突檢測,寄存器MAC_CFG有個配置位CSD,早期我們調(diào)試時,CSD一旦配置為0(即啟用沖突檢測),通訊就失敗。
為此我們也找了GD32的技術(shù)支持,對方給的原因是,啟動沖突檢測時PHY的CRS_DV腳必須在MAC發(fā)送時拉高才能正常發(fā)送
于是我們找到了PHY確實存在寄存器可以使能發(fā)送狀態(tài)下的載波檢測,通過示波器檢測,也確實有在MAC發(fā)送時拉高,但是這個拉高只拉了一小會,MAC就停止發(fā)送了,通過逐個BIT數(shù)下來,發(fā)現(xiàn)MAC只發(fā)送了前導碼部分就停止發(fā)送了,這又是什么原因呢?
我們做了個推論,可能MAC需要的不僅僅是CRS_DV腳使能,同時需要將MAC發(fā)出的數(shù)據(jù)返回做對比才能正常發(fā)送,可是PHY只能返回載波使能信號,不能將發(fā)送的數(shù)據(jù)返回,無奈我們在FPGA內(nèi)做了邏輯,在無通訊沖突的情況下,將MAC發(fā)出的數(shù)據(jù)返回給MAC,于是乎,通訊成功了,MAC層的沖突檢測成功啟用。