ENC28J60學習筆記 第3部分

2021-08-27 15:30:36 字數 2149 閱讀 6449

相關資料中包括其他精彩博文和**倉庫

【嵌入式 tcp ip 資料彙總】

【enc28j60學習筆記——索引】 【第1部分】【第2部分】【第3部分】【第4部分】

【stm32net學習筆記——索引】

【uip學習筆記】

通過enc28j60傳送乙太網資料報,操作enc28j60硬體緩衝區的傳送部分即可。每次傳送時總是從傳送緩衝區的起始位址開始填充資料,資料填充的結束位址和資料報長度有關。設定傳送緩衝區大小之後可向傳送緩衝區填充資料,即呼叫enc28j60_write_buf_mem操作命令,接著置位econ1中的 econ1_txrts位啟動傳送,並使用等待法不斷查詢是否傳送完畢。基本的思路還是和spi或uart傳送資料相似,即填充資料,啟動傳送,查詢傳送完成。寫操作的輸入引數為資料報的長度len和資料報指標packet,該引數正好和uip的網路層操作函式相對應。

void enc28j60packetsend(unsigned int len, unsigned char* packet)

}

讀操作要比寫操作複雜一些。寫操作時每次總是從硬體傳送緩衝區的起始位址開始操作,而讀操作時需要不斷修改接收緩衝區的讀指標位址,該引數需要通過nextpacketptr完成,該變數為uint16_t型別的全域性變數。讀操作時,先通過暫存器檢視是否存在乙太網資料報,讀epktcnt暫存器便可返回乙太網資料報的個數;若存在乙太網資料報則設定讀指標的位址,執行讀緩衝區操作,enc28j60的乙太網接收資料報中前兩個位元組為下乙個乙太網資料報的起始位址,立即儲存該引數至nextpacketptr全域性變數;乙太網資料報中的後兩個位元組為該資料報的長度,該長度指從目標mac位址開始的資料報的長度,進行處理時還需要捨棄最後的4位元組crc校驗結果;通過讀緩衝區操作碼把長度為len的乙太網接收資料報儲存至ram中的某個位置,例如rxtx_buf全域性陣列。最後根據nextpacketptr移動讀指標以便下次操作,並通過操作econ2的econ2_pktdec位遞減了乙太網資料報個數。

unsigned int enc28j60packetreceive(unsigned int maxlen, unsigned char* packet)

/* 設定接收緩衝器讀指標 */

enc28j60write(erdptl, (nextpacketptr));

enc28j60write(erdpth, (nextpacketptr)>>8);

/* 接收資料報結構示例 資料手冊43頁 */

/* 讀下乙個包的指標 */

nextpacketptr = enc28j60readop(enc28j60_read_buf_mem, 0);

nextpacketptr |= enc28j60readop(enc28j60_read_buf_mem, 0)<<8;

/* 讀包的長度 */

len = enc28j60readop(enc28j60_read_buf_mem, 0);

len |= enc28j60readop(enc28j60_read_buf_mem, 0)<<8;

/* 去除crc校驗部分 */

len-= 4;

/* 讀取接收狀態 */

rxstat = enc28j60readop(enc28j60_read_buf_mem, 0);

rxstat |= enc28j60readop(enc28j60_read_buf_mem, 0) << 8;

/* 限制檢索的長度 */

if (len > maxlen-1)

/* 檢查crc和符號錯誤 */

/* erxfcon.crcen是預設設定。通常我們不需要檢查 */

if ((rxstat & 0x80)==0)

else

/* 移動接收緩衝區 讀指標*/

enc28j60write(erxrdptl, (nextpacketptr));

enc28j60write(erxrdpth, (nextpacketptr)>>8);

/* 資料報遞減 */

enc28j60writeop(enc28j60_bit_field_set, econ2, econ2_pktdec);

/* 返回長度 */

return(len);

}

ENC28J60學習筆記 第4部分

0.相關資料 相關資料中包括其他精彩博文和 倉庫 嵌入式 tcp ip 資料彙總 enc28j60學習筆記 索引 第1部分 第2部分 第3部分 第4部分 stm32net學習筆記 索引 uip學習筆記 lwip學習筆記 stm32 enc28j60移植與入門 6 enc28j60初始化操作 enc2...

ENC28J60學習筆記 第4部分

相關資料中包括其他精彩博文和 倉庫 嵌入式 tcp ip 資料彙總 enc28j60學習筆記 索引 第1部分 第2部分 第3部分 第4部分 stm32net學習筆記 索引 uip學習筆記 enc28j60初始化操作內容較多。第一,進行cs埠的相關配置,即把該埠設定為輸出狀態,該部分 可以出現在任何硬...

基於Enc28j60的LwIP(1 4 1)移植

移植過程比較容易,網上一堆教程,本文主要將low level output和low level input針對enc28j60做一些優化,減少資料拷貝。網上比較多的應該是如下 static err t low level output struct netif netif,struct pbuf p...