下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、STM32F2x7 以太网 FreeRTOS 下驱动问题的说明STM32F2x7 FreeRTOS 下网络压力测试错误无法恢复一.前言很多朋友反映 ST 官网的例程 stsw-stm32060(也就是 STM32F2x7 的以太网例程)中的 FreeRTOS 驱动有问题,表现为在网络压力测试下向 STM32 进行测试,过段时间后会出现无法恢复的网络延时,甚至出现不通(网络不通的情况,注意不是超时)。事实上,ST 的工程师已经发现了这个 bug,他们在 stsw-stm32070(STM32F4x7 的以太网例程,不过 STM32F2x7 还没有更新这个驱动)中修复了这个 bug。但是许多朋友并
2、不知道这件事,这篇文档就是对这个问题进行一些说明,另外将新的驱动移植到了 STM32F2x7 中(暂时就叫做STM32F2x7_ETH_LwIP_V1.2.0(RC)) :-D。二Stsw-stm32060 中产生原因解释这个问题前,首先要对 ST 的驱动程序进行一些说明,以太网的数据是通过 FIFO 送入 DMA 缓冲区的,lwip 的底层输入函数(ethernetif_input 进程)将数据从 DMA 缓冲区拷贝到协议栈缓冲区,数据由协议栈自行处理(tcp_ip 进程)。1. 以太网的 DMA 有两个拥有者主机:数据可以被处理;DMA 自身:只有在这种情况下DMA 可以接收数据并产生中断
3、。特别需要注意的当 DMA 描述符所对应的缓冲区满的时候,该描述符会为主机所拥有;驱动程序是将数据拷贝到 lwIP 的数据缓冲区后将该 DMA 拥有者置为 DMA 自身。2. ST 的例程是采用中断机制来处理以太网的数据接收FreeRTOS 下使用 Counter Semaphore 来对中断进行描述(Counter Semaphore 的增长是在中断处理函数中的),中断服务程序(ethernetif_input,后文称这个函数为 ISR,但这个任务并不在中断处理函数中,这个任务平常是阻塞的,只有得到信号量后才会运行)仅处理一个以太网 packet。正常情况下,在数据包到达 STM32 的以太
4、网接收缓冲区时,会进入中断,中断程序会将 CounterSemaphoare+1,从而触发中断服务程序 ISR(ethernetif_input)对这个包进行处理。但是,如果有数据包送到接收缓冲区,但是没有及时产生中断的话(在操作系统中这是非常容易引起的,比如更高级的中断或者临界代码,这些操作都会掉其它中断)。此时就会发生一种奇怪的现象,即 Counter Semaphore 的值与数据缓冲区的 packet不对应。如下图所示这个时候网络状况就非常糟糕了,实际的ISR 程序执行的非常晚,表现的方式就是大量的的延时甚至是 Timeout。见下图。Counter Semaphore3567815D
5、MA BufferData1Data2Data3Data4Data5Data6Counter Semaphore123456DMA BufferData1Data2Data3Data4Data5Data6但这还不是最糟糕的,一旦 DMA Buffer 满了,同时 Counter Semaphore 中没有任何可用信号量。按照刚才提到的,DMA 是无法再接收数据并产生中断了(RBUS = 1),即无法进入中断处理函数,从而的响应就不是 timeout,而是 IP 无法到也无法触发触发中断服务程序。网络就表现为断线。此时达(我在写这篇文档时候没出现这个情况,所以没有截图,但是以前是遇到过的)。三.
6、 Stsw-stm32070 的改进1. ethernetif_input 中处理多个以太网 packet,即只要进入这个程序,就会将以太网的缓冲处理完。sic struct pbuf * low_level_input(struct netif *netif)if (p != NULL)DMARxDesc = frame.descriptor; bufferoffset = 0;for(q = p; q != NULL; q = q-next) /* 处理完缓冲区*/* 将缓冲区归还给 DMA,从而允许新的中断产生 */ DMARxDesc =frame.descriptor;for (i=
7、0; iSeg_Count; i+)DMARxDesc-Sus = ETH_DMARxDesc_OWN;DMARxDesc = (ETH_DMADESCTypeDef *)(DMARxDesc-Buffer2NextDescAddr);DMA_RX_FRAME_infos-Seg_Count =0;/* 出错处理,置位 RBUS */if (ETH-DMASR & ETH_DMASR_RBUS) != (u32)RESET)ETH-DMASR = ETH_DMASR_RBUS;ETH-DMARPDR = 0;2. FreeRTOS 下中断采用二值信号量来触发阻塞任务。void ETH_IRQH
8、andler(void)./* 中断后二值信号量,从而唤醒任务 */if ( ETH_GetDMAFlagSus(ETH_DMA_FLAG_R) = SET)xSemaphoreGiveFromISR( s_xSemaphore, &xHighriorityTaskWoken );大家可以简单分析一下,在这种情况下,是不会出现 stm32060 中的。丢包和延时仍然是可能出利用新的驱动做的测试,2 个tester(10ms, 1kbytes),同时还打开 http 服务(事(1s, 1000bytes),这个测试压力比许多应用要大很现的。这是实上已经 http 已经完全没有响应了)和 cmd 的多,stm32F4x7(168MHz)仍然能保持网络的畅通性。四. 结语可以看出新的驱动确实较之过去有了明显的。由于 STM32F4 和 F2 的以太网外设是一样的,所以驱动也
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年心理咨询师之心理咨询师基础知识考试题库500道(典优)
- 2026年上半年江苏省中小学教师资格考试(笔试)备考题库及参考答案(精练)
- 2026年抖音考试题库及参考答案【模拟题】
- 2026年教师资格之中学教育知识与能力考试题库300道含完整答案【夺冠】
- 2024年至2025年机关党支部书记年度述职报告
- 2026年二级注册建筑师之法律法规经济与施工考试题库500道及完整答案【考点梳理】
- 2026年一级造价师之建设工程造价管理考试题库500道附答案【培优a卷】
- 2026全国青少年模拟飞行考核理论知识题库40题1套
- 2026年环境影响评价工程师之环评技术导则与标准考试题库500道含答案【培优b卷】
- 2026年机械员考试题库及答案【真题汇编】
- 2025黑龙江省农业投资集团有限公司权属企业市场化选聘10人笔试参考题库附带答案详解(3卷)
- 2025年全国保密教育线上培训考试题及答案(考点梳理)
- 2025年下半年贵州遵义市市直事业单位选调56人笔试考试备考试题及答案解析
- 2025年烟草笔试真题题库及答案
- 2025年新版动物防疫员考试题及答案
- 2025山西大地环境投资控股有限公司招聘116人备考笔试试题及答案解析
- 2025至2030中国农业机械化行业市场深度研究与战略咨询分析报告
- 压力管道年度检查报告2025.12.8修订
- 灯具制造工QC管理竞赛考核试卷含答案
- 2025江苏南京市市场监督管理局所属事业单位招聘工作人员6人(公共基础知识)测试题带答案解析
- 2025年法考主观题商法真题(含答案解析)
评论
0/150
提交评论