硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3693|回复: 12
收起左侧

[以太网] 分享一个基于CubeMX的以太网基础工程,顺便讨论几个技术问题

[复制链接]

0

主题

57

回帖

57

积分

初级会员

积分
57
发表于 2020-6-21 11:57:24 | 显示全部楼层 |阅读模式
本帖最后由 三尺长剑 于 2020-6-21 12:06 编辑

附件中的工程是调好的基础工程(包含CubeMX配置文件,IDE是MDK),需要先连上网线再上电哈。

说个以太网需要注意的地方,有几个问题需要和大家讨论下:
1. 以太网需要开启MPU,不然HAL_ETH_Transmit()会返回失败。MPU的配置也很讲究,本来我是把以太网专用的32K SRAM3全开启了MPU(TEX=0、Cache=0、Buffer=0、Shareable=1),结果DHCP.c中的mem_malloc()会失败(本贴尾部代码)。后来参考CubeMX中例程把SRAM3分成两部分并分别开启MPU才成功了。关于MPU的配置有些疑问,配置选项中的Buffer和Shareable配置依据是什么呢?大伙能不能提供点资料

2. 不可使用AC6编译器,应该是代码没对AC6编译器的预处理做判断会报两个错误,报错的代码和文件屏蔽掉就行了,屏蔽后代码虽能运行但以太网功能用不起来,应该是还有其他地方缺AC6的宏定义,有知道的小伙伴可以说说哈

3. 以太网的专用的SRAM3内存也是有点玄学,一般来讲各个内存块不用专门手动开启就能用,然而以太网手动使能才行(@硬汉哥,可以用附件工程验证一下,真是如此的话安富莱手册25.4节结尾处说的‘实测结果’需要修正一下啦)。另外一个现象是如果MCU已经手动开启了SRAM3,在不断电的情况下用stlink烧录一个关闭SRAM3的代码也能正常运行,但是断电重启后mem_malloc()(本贴尾部代码)会失败。看来是STLINK烧的录重启还不能完全复位MCU的寄存器

4. 以太网的中断是否需要开启?测试发现无论开启与否都能正常使用啊

6. 以太网怎么使用DMA收发数据呢?H7配有专用DMA但HAL库中没有类似其他外设的收发API,HAL_xxx_Transmit(Receive)_DMA
err_t dhcp_start(struct netif *netif)
{
    /* 略 */

    /* no DHCP client attached yet? */
    if (dhcp == NULL) {
        LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): mallocing new DHCP client\n"));
       dhcp = (struct dhcp *)mem_malloc(sizeof(struct dhcp));
        if (dhcp == NULL) {
            LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n"));
        return ERR_MEM;
    }

    /* 略 */
    }
    return result;
}


ETH_TEST.rar (36.3 MB, 下载次数: 129)


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107643
QQ
发表于 2020-6-21 13:51:16 | 显示全部楼层
1、问题1:
STM32H7使用LWIP为什么必需要使能DCACHE,同时必需使用AXIRAM?
http://www.armbbs.cn/forum.php?mod=viewthread&tid=97338

2、我们的LwIP案例支持AC6,修改那个那个attribute使用AC6方式即可正常编译:
http://www.armbbs.cn/forum.php?m ... 5874&extra=page%3D1

3、最好手动开时钟,不开的话,大部分应用也没啥问题。

4、不开就是查询方式。带OS的话,如果查询不勤快,ping响应时间长。

5、ETH自带DMA,不是用的通用DMA


回复

使用道具 举报

0

主题

57

回帖

57

积分

初级会员

积分
57
 楼主| 发表于 2020-6-21 17:12:26 | 显示全部楼层
eric2013 发表于 2020-6-21 13:51
1、问题1:
STM32H7使用LWIP为什么必需要使能DCACHE,同时必需使用AXIRAM?
http://www.armbbs.cn/forum.p ...

感谢!之前没找到您的网络教程,老大的文章有深度,看着踏实。

这几个问题基本都解了,还是想请教一下mpu里的shareable和buffer的开关分别对应什么样的应用场景呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107643
QQ
发表于 2020-6-21 22:02:58 | 显示全部楼层
三尺长剑 发表于 2020-6-21 17:12
感谢!之前没找到您的网络教程,老大的文章有深度,看着踏实。

这几个问题基本都解了,还是想请教一下 ...

看V7的教程的Cache章节即可
回复

使用道具 举报

0

主题

57

回帖

57

积分

初级会员

积分
57
 楼主| 发表于 2020-6-22 23:45:35 | 显示全部楼层
eric2013 发表于 2020-6-21 22:02
看V7的教程的Cache章节即可

之前仔细阅读过cache章节了,还有有几点没明白望指教:
  1. 组合1:TEX = 000 C=0 B=0 S=忽略此位,强制为共享
  2. 组合2:TEX = 000 C=0 B=1 S=忽略此位,强制为共享
  3. 组合3:TEX = 001 C=0 B=0 S=0
  4. 组合4:TEX = 001 C=0 B=0 S=1
复制代码

无cache的情况下有上面4组,这4组同是无cache使用起来有什么区别呢,主要不清楚分别适用什么样的场景
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107643
QQ
发表于 2020-6-23 00:03:54 | 显示全部楼层
三尺长剑 发表于 2020-6-22 23:45
之前仔细阅读过cache章节了,还有有几点没明白望指教:

无cache的情况下有上面4组,这4组同是无cache ...

1.jpg

4.jpg
回复

使用道具 举报

0

主题

57

回帖

57

积分

初级会员

积分
57
 楼主| 发表于 2020-6-23 10:16:52 | 显示全部楼层

三种内存类型分别对应什么样的应用场景呢?
normal像是普通的ram,
strongly ordered有点像放代码段的
device就不是很清楚有什么作用了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107643
QQ
发表于 2020-6-23 10:51:12 | 显示全部楼层
三尺长剑 发表于 2020-6-23 10:16
三种内存类型分别对应什么样的应用场景呢?
normal像是普通的ram,
strongly ordered有点像放代码段的
...

从应用的角度,主要是性能的差别,strongly ordered最差,然后是device,然后是normal。

理解到这点就够用了。
回复

使用道具 举报

0

主题

57

回帖

57

积分

初级会员

积分
57
 楼主| 发表于 2020-6-23 11:23:04 | 显示全部楼层
eric2013 发表于 2020-6-23 10:51
从应用的角度,主要是性能的差别,strongly ordered最差,然后是device,然后是normal。

理解到这点就 ...

不仅是性能差异,我测试串口DMA的时候把SRAM1的MPU按下面第一种参数配置的时候,DMA收的数据不对,第二组正常
1. TEX = 0, C = 0, B = 0, S = X
2. TEX = 1, C = 0, B = 0, S = 0
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107643
QQ
发表于 2020-6-23 14:13:16 | 显示全部楼层
三尺长剑 发表于 2020-6-23 11:23
不仅是性能差异,我测试串口DMA的时候把SRAM1的MPU按下面第一种参数配置的时候,DMA收的数据不对,第二组 ...

性能差异是他们表现出来的最主要区别。实际应用中的细化是这样:

像那个以太网描述符的配置,FMC的静态驱动方式,基本都是配置为strongly ordered或者Device。

而那个Normal是最接近于F4,F1的通用RAM使用方式。

而你说的这个配置案例,如果程序没有出现硬件异常,是你的程序设计和配置不合理导致的。
回复

使用道具 举报

0

主题

57

回帖

57

积分

初级会员

积分
57
 楼主| 发表于 2020-6-24 17:39:52 | 显示全部楼层
eric2013 发表于 2020-6-23 14:13
性能差异是他们表现出来的最主要区别。实际应用中的细化是这样:

像那个以太网描述符的配置,FMC的静 ...

无硬件异常,唯一区别是TEX的取值不同

1. TEX = 0, C = 0, B = 0, S = 0(DMA接收数据异常)
2. TEX = 1, C = 0, B = 0, S = 0(正常)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107643
QQ
发表于 2020-6-24 18:03:17 | 显示全部楼层
三尺长剑 发表于 2020-6-24 17:39
无硬件异常,唯一区别是TEX的取值不同

1. TEX = 0, C = 0, B = 0, S = 0(DMA接收数据异常)

大概率是你的程序设计问题。
这个问题就讨论这么多吧,结帖。
回复

使用道具 举报

0

主题

57

回帖

57

积分

初级会员

积分
57
 楼主| 发表于 2020-6-24 18:21:30 | 显示全部楼层
eric2013 发表于 2020-6-24 18:03
大概率是你的程序设计问题。
这个问题就讨论这么多吧,结帖。

嗯,不管怎样多谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-10 00:52 , Processed in 0.292909 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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