RT-Thread论坛
直播中

王燕

7年用户 1730经验值
私信 关注
[活动]

STM32H7系列AXI SRAM设置不同的cache策略导致以太网初始化异常怎么解决?

最近基于STM32H743处理器进行以太网移植,mpu按照art-pi配置是可以,以太网初始化正常,且可以ping通,此时AXI SRAM设置为 write-through 和 no write allocate,如下:

    MPU_InitStruct.Enable            = MPU_REGION_ENABLE;
    MPU_InitStruct.BaseAddress        = 0x24000000;
    MPU_InitStruct.Size                = MPU_REGION_SIZE_512KB;
    MPU_InitStruct.AccessPermission    = MPU_REGION_FULL_ACCESS;
    MPU_InitStruct.IsBufferable        = MPU_ACCESS_BUFFERABLE;
    MPU_InitStruct.IsCacheable        = MPU_ACCESS_CACHEABLE;
    MPU_InitStruct.IsShareable        = MPU_ACCESS_NOT_SHAREABLE;
    MPU_InitStruct.Number            = MPU_REGION_NUMBER0;
    MPU_InitStruct.TypeExtField        = MPU_TEX_LEVEL0;
    MPU_InitStruct.SubRegionDisable    = 0X00;
    MPU_InitStruct.DisableExec        = MPU_INSTRUCtiON_ACCESS_ENABLE;
尝试使用其它cache策略,出现一些奇怪的现象,表现为栈溢出或者直接进入hardfault,如下两种配置都存在问题,第一种如下, write-back 和 write allocate

    MPU_InitStruct.Enable            = MPU_REGION_ENABLE;
    MPU_InitStruct.BaseAddress        = 0x24000000;
    MPU_InitStruct.Size                = MPU_REGION_SIZE_512KB;
    MPU_InitStruct.AccessPermission    = MPU_REGION_FULL_ACCESS;
    MPU_InitStruct.IsBufferable        = MPU_ACCESS_BUFFERABLE;
    MPU_InitStruct.IsCacheable        = MPU_ACCESS_CACHEABLE;
    MPU_InitStruct.IsShareable        = MPU_ACCESS_NOT_SHAREABLE;
    MPU_InitStruct.Number            = MPU_REGION_NUMBER0;
    MPU_InitStruct.TypeExtField        = MPU_TEX_LEVEL1;
    MPU_InitStruct.SubRegionDisable    = 0X00;
    MPU_InitStruct.DisableExec        = MPU_INSTRUCTION_ACCESS_ENABLE;
第二种如下, write-back 和 no write allocate

    MPU_InitStruct.Enable            = MPU_REGION_ENABLE;
    MPU_InitStruct.BaseAddress        = 0x24000000;
    MPU_InitStruct.Size                = MPU_REGION_SIZE_512KB;
    MPU_InitStruct.AccessPermission    = MPU_REGION_FULL_ACCESS;
    MPU_InitStruct.IsBufferable        = MPU_ACCESS_BUFFERABLE;
    MPU_InitStruct.IsCacheable        = MPU_ACCESS_CACHEABLE;
    MPU_InitStruct.IsShareable        = MPU_ACCESS_NOT_SHAREABLE;
    MPU_InitStruct.Number            = MPU_REGION_NUMBER0;
    MPU_InitStruct.TypeExtField        = MPU_TEX_LEVEL0;
    MPU_InitStruct.SubRegionDisable    = 0X00;
    MPU_InitStruct.DisableExec        = MPU_INSTRUCTION_ACCESS_ENABLE;
有大神了解相关内容的吗?给简单介绍一些为什么会出现这种状况,似乎只要设置成MPU_ACCESS_BUFFERABLE就有问题。

更多回帖

发帖
×
20
完善资料,
赚取积分