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