网络开发LWIP总结

南北湖创客7个月前目标管理8

v> ethernetif_input()

v> ethernet_input()函数

v> ARP 数据 包就会给 ARP 去处理

v>如果是 IP 数据报就使用 ip4_input()函数传递到上层

v> 对于多播或者是广播数据包,ethernet_output()函数

v> 对于单播包的处理稍微麻烦一点,ARP 协议需要根据 IP 地址找到对应的 MAC 址,然后才能正确发送

v> PBUFF_ERFPBUF_POOLPBUF_RAM 类型的数据包是 不允许直接挂到 ARP 表项对应的缓存队列上的


发送测试1:  etharp_output()

对于多播或者是广播数据包,直接将数据包丢给网卡(调用 ethernet_output()函数)

low_level_output

HAL_ETH_Transmit(&EthHandle, &TxConfig, ETH_DMA_TRANSMIT_TIMEOUT);



EthHandle.Instance            = ETH;
EthHandle.Init.MACAddr        = dm9162dev.mac;            /* MAC地址 */                /* ST的 MAC 修改1 */
EthHandle.Init.RxDesc            = DMARxDscrTab;            /* 接收描述符 */
EthHandle.Init.TxDesc            = DMATxDscrTab;            /* 发送描述符 */
EthHandle.Init.RxBuffLen        = ETH_RX_BUFFER_SIZE;    /* 接收数组大小 */
EthHandle.Init.MediaInterface = HAL_ETH_RMII_MODE;        /* RMII接口 */



memset(&TxConfig, 0, sizeof(ETH_TxPacketConfig));
TxConfig.Attributes   = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
TxConfig.CRCPadCtrl   = ETH_CRC_PAD_INSERT;


Txbuffer[i].buffer = q->payload;
Txbuffer[i].len = q->len;
framelen += q->len;

TxConfig.Length = framelen;(总包长度)
TxConfig.TxBuffer = Txbuffer;(发送指针)


ETH_Prepare_Tx_Descriptors(heth, pTxConfig, 0)(从pTxConfig转移到heth,具体转移内容不详)

INCR_TX_DESC_INDEX(heth->TxDescList.CurTxDesc, 1U);(地址加1)

WRITE_REG(heth->Instance->DMACTDTPR, (uint32_t)(heth->TxDescList.TxDesc[heth->TxDescList.CurTxDesc]));(由对应位置进行发送)

相关文章

个人简历HTML

DocumentAileen基本信息求职意向:JAVA开发联系电话:178******42个人邮箱:aileen******08@qq.commy Giteemy blog教育背景小学初中高中大学专业...

关于建站的目标

欢迎在宝塔面板安装Z-BlogPHP!管理员账号:admin(lu)管理员密码:zblogger(LU@7)请安装成功后登入后台更改初始化的密码为安全密码!离开始建站将近一个月,其实网站也就费用做了一...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。