硬汉嵌入式论坛

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

关于H743的MPU不太会用,硬汉兄帮忙看看对不对。

[复制链接]

50

主题

68

回帖

218

积分

高级会员

积分
218
发表于 2024-5-9 17:02:48 | 显示全部楼层 |阅读模式
我的MCU是H743,扩展了NAND和SDRAM,LTDC扩展了彩屏,如下的MPU代码,我不知道是否有不妥的地方。目前有一个比较严重的问题就是:NAND里用的FLASHFS文件系统,但有些系统在开机时,会出现fmount返回11(无文件系统)的情况,不知道是否和MPU配置有关系?麻烦硬汉兄看一下,指导一下。

static void MPU_Config( void )
{
    MPU_Region_InitTypeDef MPU_InitStruct;

    /* ?? MPU */
    HAL_MPU_Disable();

    /* ??AXI SRAM?MPU???Write through, read allocate,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_NOT_BUFFERABLE;
    MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;
    MPU_InitStruct.IsShareable      = MPU_ACCESS_SHAREABLE;
    MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
    MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
    MPU_InitStruct.SubRegionDisable = 0x00;
    MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

    HAL_MPU_ConfigRegion(&MPU_InitStruct);


    /* ??NAND Flash */
    MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
    MPU_InitStruct.BaseAddress      = 0x80000000;
    MPU_InitStruct.Size             = MPU_REGION_SIZE_512MB;    // MPU_REGION_SIZE_512MB;
    MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
    MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
    MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;
    MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
    MPU_InitStruct.Number           = MPU_REGION_NUMBER1;
    MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
    MPU_InitStruct.SubRegionDisable = 0x00;
    MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;
    HAL_MPU_ConfigRegion(&MPU_InitStruct);

    /*
           配置SDRAM的MPU属性为Write through, read allocate,no write allocate
           这种配置的情况下,读Cache对性能提升有一定的作用,但使用GUI做Alpha的场合要注意。
           需要用户手动做无效化操作。
        */

    MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
    MPU_InitStruct.BaseAddress      = 0xC0000000;
    MPU_InitStruct.Size             = MPU_REGION_SIZE_32MB;
    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_NUMBER2;
    MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
    MPU_InitStruct.SubRegionDisable = 0x00;
    MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

    HAL_MPU_ConfigRegion(&MPU_InitStruct);

    HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}



回复

使用道具 举报

50

主题

68

回帖

218

积分

高级会员

积分
218
 楼主| 发表于 2024-5-10 07:45:30 | 显示全部楼层
我和例程比对了一下,主要这里有区别:
MPU_InitStruct.BaseAddress      = 0x24000000;
MPU_InitStruct.IsShareable      = MPU_ACCESS_SHAREABLE;                  //例程里是MPU_ACCESS_NOT_SHAREABLE

MPU_InitStruct.BaseAddress      = 0x80000000;
MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;        ///例程里是MPU_ACCESS_BUFFERABLE

不清楚应该如何配置,有什么影响?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107488
QQ
发表于 2024-5-10 09:30:34 | 显示全部楼层
可以考虑修改成跟我这个帖子里面一样的配置试试。

因为这个FMC驱动NAND没有用到DMA,所以配置MPU/Cache影响不大,但一定要配置为Strongly order或者device模式,这两个都试试。

https://www.armbbs.cn/forum.php? ... B%BA%CF%C4%A3%B0%E5
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 22:37 , Processed in 0.158496 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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