1. lwip在調用tcp_write后不會立即發送數據,而會等到tcp_slow_tmr中再發送。如需立即發送,可以在tcp_write后調用tcp_output。lwip的這種處理方式對連續調用tcp_write的場合(例如要發送的App層報文頭在A處,報文數據在B處)非常合適:在最后一次tcp_write后調用tcp_output。
2. 如果抓包工具報告有不連續的tcp報文(例如本該是報文1,2,3,只捕獲到報文1,3),可能是過於頻繁的調用了tcp_output,導致上次tcp_output尚未完成(low_level_output的DMA進行中),下次的tcp_out又開始low_level_output。ST的Demo未能很好的處理該問題。可在ethernetif中為low_level_output建立link list,當發送engine忙時,暫時將待發數據link起來。性能要求不嚴格的情況下,避免頻繁調用tcp_output即可。
3. PHY配置為自動協商,*不*要強制為Full Duplex/100MHz,否則會遇到PHY數據包丟失的問題(可能是因為線纜順序、極性等原因)。