STM32F7 + FREERTOS + LWIP 接收数据从网卡到应用层完整流程

来来来,这里解释下从网卡PHY到IP层的数据接收流程:


这里是以函数调用方式来体现:


netif_add——》ethernetif_init——》low_level_init——》ethernetif_input——》low_level_input和tcpip_input——》


ethernet_input
——》 ip4_input(etharp_input、pppoe_disc_input)——》udp_input、tcp_input、icmp_input、igmp_input等




1.在netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);这个函数中,主要用到的是


ethernetif_init(对网口底层初始化)、tcpip_input(向上层递交数据)这两个函数。


2.在ethernetif_init函数中,调用low_level_init函数,low_level_init函数中创建ethernetif_input线程进行中断信号量方式的接收数


据,DMA接收到完整帧后释放信号量,ethernetif_input线程用low_level_input提取完整数据包,再通过tcpip_input中调用的


ethernet_input将数据传递给上层如:IP、ARP、PPOE等,具体递交给哪层由数据包类型决定,到这里底层PHY到IP层部分完成;


3.数据包递交到IP层后(只讨论含数据帧流程,ARP等不讨论),switch不同帧类型来将数据传递给不同传输层协议,如TCP、UDP等,这样


数据就从IP层传输到了传输层,再递交给上层应用。至此,由IP层到应用层完成。


上面不同颜色含义:


浅绿色:底层PHY接收到IP层之间数据传递;


蓝色: IP层到应用层数据传递。

你可能感兴趣的:(STM32,LWIP)