搜索
bottom↓
回复: 9

RTT+LWIP,只用STM32F407内部0x10000000开始64K的CCMRAM中,网络不通

[复制链接]

出0入0汤圆

发表于 2012-11-27 15:31:00 | 显示全部楼层 |阅读模式
RT,硬件环境STM32F407VET6+KSZ8041NL,之前一直没注意内存的使用问题,所以网络一直都是好的。
目前我们需要很大一部分存储空间作为缓冲区(越大越好)。
因为STM32F407内存空间为:0x20000000开始的128KB的SRAM和0x10000000开始的64KB的CCMRAM。
所以就想着把连续的128KB全部做为缓冲区,而把其他的放到0x10000000开始的64KB的CCMRAM中。

已经注意到那64KB的CCRAM不能用作DMA缓冲,所以已经把网络DMA定义到了0x20000000开始的SRAM中去,可是网络还是不通,最基本的网络中断都进不去~~~不知道有人做过这方面的研究没,一起探讨一下!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-11-27 16:26:21 | 显示全部楼层
还是建议关注CCM不能使用DMA的问题

出0入0汤圆

 楼主| 发表于 2012-11-27 16:30:23 | 显示全部楼层
刚刚问题貌似得到解决了,我来说明一下吧:stm32f4x7_eth.c中
不但要将网络发送DMA缓冲区Tx_Buff、接收DMA缓冲区Rx_Buff定义到0x20000000中去,还要将发送、接收DMA描述符表(Ethernet Tx, Rx DMA Descriptor):也放到0x20000000中去。
如下:
  #pragma data_alignment=4
  #pragma location = ".DMARAM"
   ETH_DMADESCTypeDef  DMARxDscrTab[ETH_RXBUFNB];/* Ethernet Rx MA Descriptor */
  #pragma data_alignment=4
   #pragma location = ".DMARAM"
   ETH_DMADESCTypeDef  DMATxDscrTab[ETH_TXBUFNB];/* Ethernet Tx DMA Descriptor */
  #pragma data_alignment=4
#pragma location = ".DMARAM"
   uint8_t Rx_Buff[ETH_RXBUFNB][ETH_RX_BUF_SIZE]; /* Ethernet Receive Buffer */
  #pragma data_alignment=4
#pragma location = ".DMARAM"
   uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE]; /* Ethernet Transmit Buffer */

出0入0汤圆

发表于 2012-11-27 16:46:13 | 显示全部楼层
之前我也遇到这么低级问题,DMA访问不到CCRAM

出0入0汤圆

发表于 2012-12-18 20:33:23 | 显示全部楼层
你定义128K缓存后,以太网速度有多块?

出0入0汤圆

 楼主| 发表于 2013-1-2 11:03:45 | 显示全部楼层
ctgutc 发表于 2012-12-18 20:33
你定义128K缓存后,以太网速度有多块?

我的128K不是真正作为网络的DMA缓存,而是人为的保存下来之前发送的UDP数据,为自定义的重传使用!
所以那128KRAM对系统跟网络速度都没有提升

出0入0汤圆

 楼主| 发表于 2013-1-3 10:34:40 | 显示全部楼层
本帖最后由 qinmeng 于 2013-1-3 11:18 编辑
ffxz 发表于 2012-11-27 16:26
还是建议关注CCM不能使用DMA的问题


你好,ffxz:还是关于那64KCCMRAM的问题,我之前以为通过一下方式得到解决了

刚刚问题貌似得到解决了,我来说明一下吧:stm32f4x7_eth.c中
不但要将网络发送DMA缓冲区Tx_Buff、接收DMA缓冲区Rx_Buff定义到0x20000000中去,还要将发送、接收DMA描述符表(Ethernet Tx, Rx DMA Descriptor):也放到0x20000000中去。
如下:
  #pragma data_alignment=4
  #pragma location = ".DMARAM"
   ETH_DMADESCTypeDef  DMARxDscrTab[ETH_RXBUFNB];/* Ethernet Rx MA Descriptor */
  #pragma data_alignment=4
   #pragma location = ".DMARAM"
   ETH_DMADESCTypeDef  DMATxDscrTab[ETH_TXBUFNB];/* Ethernet Tx DMA Descriptor */
  #pragma data_alignment=4
#pragma location = ".DMARAM"
   uint8_t Rx_Buff[ETH_RXBUFNB][ETH_RX_BUF_SIZE]; /* Ethernet Receive Buffer */
  #pragma data_alignment=4
#pragma location = ".DMARAM"
   uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE]; /* Ethernet Transmit Buffer */

现在出现了新问题:
当我向一个任意IP地址的任意端口(也即IP:Port不存在)发送UDP包的时候,netconn_send会返回错误类型,这到没什么。
但是当发送几次之后,就进入硬件错误。提示在RT-Thread/src/mem.c的第291行(RTT1.1.0RC版本)(RTT1.1.0正式版的302行)                                
/* and insert it between mem and mem->next */
mem->next = ptr2;
mem->used = 1;
如果我向一个已知的IP地址已知端口(也即有IP:Port在接收UDP包)发送UDP包,netconn_send返回ERR_OK也能持续发送,不会进入硬件错误
而在uCOS中没有出现过这种现象

另,今天刚测试的结果:RT-Thread1.1.0正式版+lwip1.4.1版本
当我不用那64KCCMRAM时候,不管是向哪个IP:port都不会进硬件错误
当我只用64KCCMRAM,只把网络DMA放到0x20000000的128kRAM中去,网络可以正常运行,但是:
当向不存在的IP:Port发送UDP包时,进硬件错误,向已知IP:Port(也即有IP:Port在接收次UDP包)则不进硬件错误

希望问题能得到解决!谢谢~

刚刚又测试得到的结果:(网络DMABuffer始终在0x20000000的128kRAM中)
readwrite, block HEAP, block CSTACK
上面这3块不能同时放在CCMRAM中去,任意两个放进去,或者任意一个放进去或者都不放进去,这样就不会发生上面的硬件错误!

更明确一点:不是readwrite不能跟block HEAP, block CSTACK同时放在CCMRAM中,而是任务堆栈不能跟block HEAP, block CSTACK同时放在CCMRAM中。

即使是一个空任务(只有一个rt_thread_delay(1000);)也不能把它的任务堆栈跟block HEAP, block CSTACK同时放在CCMRAM中。
头像被屏蔽

出0入0汤圆

发表于 2013-2-22 13:07:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2013-7-26 01:54:19 | 显示全部楼层
關注下64K

出0入0汤圆

发表于 2014-2-11 16:26:51 | 显示全部楼层
你好,我现在在做STM32F407的网络部分,问题很多,希望大侠指点一下网络中断,现在可以接收和发送数据,但是想用网络中断方式,网络中断看了挺长时间,还是不明白,连最基本的中断都进不去,希望指点一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 19:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表