This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM5728:GPMC 问题

Guru**** 2617035 points

Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/579072/am5728-gpmc-problem

器件型号:AM5728
Thread 中讨论的其他器件:SYSBIOS

您好!

我的 AM57X GPMC 有问题。

我们使用为硬件扭曲的 TI 引导加载程序,并初始化 GPMC 以与 FPGA 通信。 当我们运行引导加载程序时、我们可以看到 FPGA 寄存器并对其进行修改。

GPMC 控制寄存器如下所示。

GPMC_GPMC_CONFIG7_I_0
00000F41
GPMC_GPMC_NAND_COMMAND_I_0
81368136
GPMC_GPMC_NAND_ADDRESS_I_0
81368136
GPMC_GPMC_NAND_DATA_I_0
81368136 00000000 00000000
GPMC_GPMC_CONFIG1_I_1
01001000
GPMC_GPMC_CONFIG2_I_1
001E1E05
GPMC_GPMC_CONFIG3_I_1
22060514
GPMC_GPMC_CONFIG4_I_1
1C0D1C05
GPMC_GPMC_CONFIG5_I_1
00181F1F
GPMC_GPMC_CONFIG6_I_1
8D070580
GPMC_GPMC_CONFIG7_I_1
00000F42
GPMC_GPMC_NAND_COMMAND_I_1
81368136
GPMC_GPMC_NAND_ADDRESS_I_1
81368136
GPMC_GPMC_NAND_DATA_I_1
81368136 00000000 00000000
GPMC_GPMC_CONFIG1_I_2
00001000
GPMC_GPMC_CONFIG2_I_2
00101001
GPMC_GPMC_CONFIG3_I_2
22060514
GPMC_GPMC_CONFIG4_I_2
10057016
GPMC_GPMC_CONFIG5_I_2
010F1111
GPMC_GPMC_CONFIG6_I_2
8F070000
GPMC_GPMC_CONFIG7_I_2
00000F00
GPMC_GPMC_NAND_COMMAND_I_2
00000000
GPMC_GPMC_NAND_ADDRESS_I_2
00000000
GPMC_GPMC_NAND_DATA_I_2

问题是、当我们加载应用程序时、我们使用调试器来下载停止在应用程序入口点_c_init00的应用程序、我们检查了 GPMC 控制寄存器、它们仍然正常

但是、当我们将代码运行到主代码时、GPMC 寄存  器会损坏、并且我们看不到 FPGA 需要读取/写入的任何 CS、从_c_init00到主代码执行的代码会使 GPMC 发生变化。

损坏的寄存器如下所示

GPMC_GPMC_CONFIG7_I_0
55555555
GPMC_GPMC_NAND_COMMAND_I_0
55555555
GPMC_GPMC_NAND_ADDRESS_I_0
55555555
GPMC_GPMC_NAND_DATA_I_0
555555555555555555555555555555555555
GPMC_GPMC_CONFIG1_I_1
55555555
GPMC_GPMC_CONFIG2_I_1
55555555
GPMC_GPMC_CONFIG3_I_1
55555555
GPMC_GPMC_CONFIG4_I_1
55555555
GPMC_GPMC_CONFIG5_I_1
55555555
GPMC_GPMC_CONFIG6_I_1
55555555
GPMC_GPMC_CONFIG7_I_1
55555555
GPMC_GPMC_NAND_COMMAND_I_1
55555555
GPMC_GPMC_NAND_ADDRESS_I_1
55555555
GPMC_GPMC_NAND_DATA_I_1
555555555555555555555555555555555555
GPMC_GPMC_CONFIG1_I_2
55555555
GPMC_GPMC_CONFIG2_I_2
55555555
GPMC_GPMC_CONFIG3_I_2
55555555
GPMC_GPMC_CONFIG4_I_2
55555555
GPMC_GPMC_CONFIG5_I_2
55555555
GPMC_GPMC_CONFIG6_I_2
55555555
GPMC_GPMC_CONFIG7_I_2
55555555
GPMC_GPMC_NAND_COMMAND_I_2
55555555
GPMC_GPMC_NAND_ADDRESS_I_2
55555555
GPMC_GPMC_NAND_DATA_I_2

我们使用 TI 示例代码 UART_BasicExample_idkAM572x_armExampleProject 对此进行了测试、结果是相同的。

从这种情况中恢复的唯一方法是复位或下电上电。

我们需要尽可能多的帮助,因为我们现在一直在处理这一问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我们使用为硬件扭曲的 TI 引导加载程序,并初始化 GPMC 以与 FPGA 通信。 当我们运行引导加载程序时、我们可以看到 FPGA 寄存器并对其进行修改。 =========== >请阐明此问题的 TI 处理器 SDK RTOS 发行版。 以及您在 TI 引导加载程序中使用/修改了哪些源代码文件来配置 GPMC? 什么是引导模式(MMCSD、QSPI)? 您是否使用 TI AM572x EVM 或客户电路板? 您如何读取并确认 GPMC 寄存器未被触发? 从 A15存储器窗口? C66x 窗口?

    我怀疑在引导加载程序中、您查看的 A15和 MMU 已禁用。

    然后、假设您将 JTAG 连接到 AM57x、是否删除所有 GEL 文件以避免引导加载程序已经完成的相同初始化工作?

    您连接到了什么内核? A15或 C66x? 您的应用程序打算在何处运行? 我都不清楚。

    您的应用是裸机吗? 或者您的应用是 SYSBIOS? 您的应用是否启用 MMU? UART_BasicExample_idkAM572x_armExampleProject 在 SYSBIOS 配置中启用 MMU,如果将该程序运行到 main(),则无法在 A15内存窗口中直接读取 GPMC 寄存器。 您必须设置 MMU 才能访问。 检查
    e2e.ti.com/.../1989911 (如果有)。

    此外、您还可以查看 DSP 内核以确保 GMPC 在_c_int00到 main()范围内是否确实损坏、或者由于 MMU 设置、您只是从错误的方式查看了它。 此外、GPMC_REVISION 寄存器是只读的、不能损坏。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Eric:
    下面是我对您的问题的回答。

    我们使用为硬件扭曲的 TI 引导加载程序,并初始化 GPMC 以与 FPGA 通信。 当我们运行引导加载程序时、我们可以看到 FPGA 寄存器并对其进行修改。 =========== >请阐明此问题的 TI 处理器 SDK RTOS 发行版。 以及您在 TI 引导加载程序中使用/修改了哪些源代码文件来配置 GPMC? 什么是引导模式(MMCSD、QSPI)? 您是否使用 TI AM572x EVM 或客户电路板? 您如何读取并确认 GPMC 寄存器未被触发? 从 A15存储器窗口? C66x 窗口?

    密耳:
    我们使用的是最新的 BIOS 版本6.46.2.47和 XDCTools 版本3.32.1.22、TI 引导加载程序中没有用于初始化配置 GPMC 的源代码、但我们使用 TI 函数来执行此操作。

    函数如下所示:

    空 GpmcInit()

    uint32_t RetVal = 0;
    uint32_t baseAddr = CSL_MPU_GPMC_CONF_regs_regs;
    uint32_t cn/sTimingParam、WeOeTimingParams、RdAccTimingParams、Cyc2TimingParams;

    GPMCModuleSoftReset (baseAddr);

    执行{
    RetVal = GPMCModuleResetStatusGet (baseAddr);
    } while (RetVal =0);

    /* GPMC 时钟设置为空闲*/
    GPMCIdleModeSelect (baseAddr、GPMC_IDLEMODE_NOIDLE);

    /*不为 GPMC 时钟启用自动空闲*/
    GPMCAutoIdleConfig (baseAddr、GPMC_AUTOIDLE_FREERUN);

    /*禁用来自 GPMC 的中断*/
    GPMCIntDisable (baseAddr、GPMC_FIFOEVENT_INT);
    GPMCIntDisable (baseAddr、GPMC_TERMINALCOUNT_INT);
    GPMCIntDisable (baseAddr、GPMC_WAIT0EDGEDETECTION_INT);
    GPMCIntDisable (baseAddr、GPMC_WAIT1EDGEDETECTION_INT);

    /*禁用超时*/
    GPMCTimeOutFeatureConfig (baseAddr、GPMC_TIMEOUTFEATURE_DISABLE);

    CsTimingParam = GPMC_CS_TIming_config (
    CS_DEASBERT_WR、
    CS_DEASBERT_RD、
    0、
    0x5);

    WeOeTimingParams = GPMC_WE_OE_TIMEOUT_CONFIG (
    WE_DEASBERT、
    0x0、
    WE_ASSERT、
    0x0、
    OE_DEASBERT、
    0x0、
    0x0、
    OE_ASSERT);

    RdAccTimingParams = GPMC_RDACCESS_CYCLETIME_TIMing_CONFIG (
    CFG_5_RD_CYCLE _TIM、
    CFG_5_WR_CYCLE _TIM、
    CFG_5_RD_ACCESS_TIM、
    0x0);

    Cyc2TimingParams =GPMC_CYCLE2CYCLE_BUSTURNAROUND_TIMing_CONFIG (
    CYC2CYC_DELAY、
    GPMC_CYCLE2CYCLESAMECSEN_C2CDELAY、
    GPMC_CYCLE2CYCLEDIFFCSEN_NOC2CDELAY、
    0x0);


    /* cs 0 FPGA 闪存*/
    GPMCDevTypeSelect (baseAddr、GPMC_CHIP_SELECT_0、GPMC_DEVICETYPE_NORLIK);
    GPMCAddrDataMuxProtocolSelect (baseAddr、GPMC_CHIP_SELECT_0、GPMC_MUXADDATA_NOMUX);
    GPMCDevSizeSelect (baseAddr、GPMC_CHIP_SELECT_0、GPMC_devicesize_16位);
    GPMCDevPageLenSet (baseAddr、GPMC_CHIP_SELECT_0、GPMC_DEV_PAGELTength_16);
    GPMCTimeParaGranularitySelect (baseAddr、GPMC_CHIP_SELECT_0、GPMC_TIMEPARAGNULARITY X1);
    GPMCFclkDividerSelect (baseAddr、GPMC_CHIP_SELECT_0、GPMC_FCLK_DIV_BY_2);
    GPMCCSTimingConfig (baseAddr、GPMC_CHIP_SELECT_0、CsTimingParam);
    GPMCWEAndOETimingConfig (baseAddr、GPMC_CHIP_SELECT_0、WeOeTimingParams);
    GPMCRdAccessAndCyclTimeTimingConfig (baseAddr、GPMC_CHIP_SELECT_0、RdAccTimingParams);
    GPMCWrAccessAndWrDataOnADMUXBusTimingConfig (baseAddr、GPMC_CHIP_SELECT_0、CFG_6_WR_ACCESS_TIM、WR_DATA_ON_ADMUX);
    GPMCycle2CyclAndTurnArndTimeTimingConfig (baseAddr、GPMC_CHIP_SELECT_0、C2TimingParams);
    GPMCWaitPinMonitoringConfig (baseAddr、GPMC_CHIP_SELECT_0、GPMC_MODE_READ、GPMC_WAITMONITORING_DISABLE);
    GPMCWaitPinMonitoringConfig (baseAddr、GPMC_CHIP_SELECT_0、GPMC_MODE_WRITE、GPMC_WAITMONITORING_DISABLE);

    /* cs 1 FPGA 闪存*/
    GPMCDevTypeSelect (baseAddr、GPMC_CHIP_SELECT_1、GPMC_DEVICETYPE_NORLIK);
    GPMCAddrDataMuxProtocolSelect (baseAddr、GPMC_CHIP_SELECT_1、GPMC_MUXADDATA_NOMUX);
    GPMCDevSizeSelect (baseAddr、GPMC_CHIP_SELECT_1、GPMC_devicesize_16位);
    GPMCDevPageLenSet (baseAddr、GPMC_CHIP_SELECT_1、GPMC_DEV_PAGELTH_16);
    GPMCTimeParaGranularitySelect (baseAddr、GPMC_CHIP_SELECT_1、GPMC_TIMEPARAGNULARITY X1);
    GPMCFclkDividerSelect (baseAddr、GPMC_CHIP_SELECT_0、GPMC_FCLK_DIV_BY_2);
    GPMCCSTimingConfig (baseAddr、GPMC_CHIP_SELECT_1、CsTimingParam);
    GPMCWEAndOETimingConfig (baseAddr、GPMC_CHIP_SELECT_1、WeOeTimingParams);
    GPMCRdAccessAndCyclTimeTimingConfig (baseAddr、GPMC_CHIP_SELECT_1、RdAccTimingParams);
    GPMCWrAccessAndWrDataOnADMUXBusTimingConfig (baseAddr、GPMC_CHIP_SELECT_1、CFG_6_WR_ACCESS_TIM、WR_DATA_ON_ADMUX);
    GPMCycle2CyclAndTurnArndTimeTimingConfig (baseAddr、GPMC_CHIP_SELECT_1、C2TimingParams);
    GPMCWaitPinMonitoringConfig (baseAddr、GPMC_CHIP_SELECT_1、GPMC_MODE_READ、GPMC_WAITMONITORING_DISABLE);
    GPMCWaitPinMonitoringConfig (baseAddr、GPMC_CHIP_SELECT_1、GPMC_MODE_WRITE、GPMC_WAITMONITORING_DISABLE);


    /*
    *映射用于 FPGA 闪存的0x00000000的 CS 0地址请求。
    *
    GPMCCSConfig (baseAddr、GPMC_CHIP_SELECT_0、GPMC_CS_DISABLE);//首先禁用芯片选择
    GPMCMaskAddrSet (baseAddr、GPMC_CHIP_SELECT_0、GPMC_CS_SIZE_16MB);// 16MB 是支持的最小尺寸。
    GPMCBaseAddrSet (baseAddr、GPMC_CHIP_SELECT_0、(0x01000000 >> 24));//此地址是 ROM 引导加载程序设置的地址。
    GPMCCSConfig (baseAddr、GPMC_CHIP_SELECT_0、GPMC_CS_ENABLE);

    /*
    *映射用于 FPGA 闪存的0x00000000的 CS 1地址请求。
    *
    GPMCCSConfig (baseAddr、GPMC_CHIP_SELECT_1、GPMC_CS_DISABLE);//首先禁用芯片选择
    GPMCMaskAddrSet (baseAddr、GPMC_CHIP_SELECT_1、GPMC_CS_SIZE_16MB);// 16MB 是支持的最小尺寸。
    GPMCBaseAddrSet (baseAddr、GPMC_CHIP_SELECT_1、(0x02000000 >> 24));//此地址是 ROM 引导加载程序设置的地址。
    GPMCCSConfig (baseAddr、GPMC_CHIP_SELECT_1、GPMC_CS_ENABLE);


    引导模式 QSPI。

    您是否使用 TI AM572x EVM 或客户电路板?
    密耳:
    我在客户和 TI AM572x idk 上对此进行了测试、结果相同。


    我怀疑在引导加载程序中、您查看的 A15和 MMU 已禁用。

    然后、假设您将 JTAG 连接到 AM57x、是否删除所有 GEL 文件以避免引导加载程序已经完成的相同初始化工作?
    密耳:
    是的、我们删除所有 GEL 文件、因为我们在引导加载程序中执行所有初始化。

    您连接到了什么内核? A15或 C66x? 您的应用程序打算在何处运行? 我都不清楚。
    密耳:
    我们连接到 A15内核0、我们的应用程序打算从该内核运行。

    您的应用是裸机吗? 或者您的应用是 SYSBIOS? 您的应用是否启用 MMU?
    密耳:
    我的应用程序是 SYSBIOS 并启用 MMU。

    UART_BasicExample_idkAM572x_armExampleProject 在 SYSBIOS 配置中启用 MMU,如果将该程序运行到 main(),则无法在 A15内存窗口中直接读取 GPMC 寄存器。 您必须设置 MMU 才能访问。 检查
    e2e.ti.com/.../1989911 (如果有)。
    密耳:
    您能给我发送正确的链接来检查这个问题吗?

    此外、您还可以查看 DSP 内核以确保 GMPC 在_c_int00到 main()范围内是否确实损坏、或者由于 MMU 设置、您只是从错误的方式查看了它。 此外、GPMC_REVISION 寄存器是只读的、不能损坏。
    密耳:
    我将对此进行检查。

    此致、
    密耳
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    链接 为 https://e2e.ti.com/support/arm/sitara_arm/f/791/p/545160/1989911

    此致、Eric

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我在上面的帖子中添加了 MMU 初始化部分、现在当我在主代码中停止时、我可以正确看到 GPMC 寄存器、但我仍然无法从 FPGA 进行读取并写入 FPGA 存储器空间0x01000000和0x02000000。
    我还需要做些什么才能使其正常工作。
    此致、
    密耳
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    好的、现在您可以从 A15正确看到 GPMC 配置寄存器。 现在真正的问题是 GPMC 不能与 FPGA 一起工作。

    是否为 GPMC 数据区域设置 MMU 属性? 对于您编程的所有 GPMC 寄存器(显示在昨天的帖子中)、您提到的代码是什么?

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    正如我已经向您解释过的、当我在_c_init00中停止时、我可以读取/写入 FPGA、这意味着引导加载程序已正确初始化 GPMC、我也可以看到 GPMC 寄存器。

    将您的代码添加到.cfg 中、从_c_init00转到主代码后、我仍然可以看到 GPMC 寄存器、但我无法再读取/写入 FPGA。

    您能否向我发送我需要添加到.cfg 文件中的内容来修复此问题?

    我曾试过这种情况、但仍然无法工作、这是可以的、或者我需要做其他事情。

    var attatsFPGA1 =新 MMU。DescriptionAttrs();
    Mmu.initDescAttrsMeta(attrsFPGA1);
    attrsFPGA1.type = MMU。描述符 Type_block;
    attrsFPGA1.sharedable = 2;//可共享
    attrsFPGA1.attrIndx = 1;//非高速缓存,设备内存
    Mmu.setSecondLevelDescMeta(0x01000000、0x01000000、attrsFPGA1);
    Mmu.setSecondLevelDescMeta(0x02000000、0x02000000、attrsFPGA1);

    var attatsFPGA2 =新 MMU。DescriptionAttrs();
    Mmu.initDescAttrsMeta(attrsFPGA2);
    attrsFPGA2.type = MMU。描述符 Type_block;
    attrsFPGA2.sharedable = 2;//可共享
    attrsFPGA2.attrIndx = 1;//非高速缓存,设备内存
    Mmu.setSecondLevelDescMeta(0x02000000、0x02000000、attrsFPGA2);
    Mmu.setSecondLevelDescMeta(0x03000000、0x03000000、attrsFPGA2);

    此致、

    密耳

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将其添加到了.cfg 中、但仍然无法读取/写入 FPGA。
    您能不能检查它是否正确。



    var attatsFPGA1 =新 MMU。DescriptionAttrs();
    Mmu.initDescAttrsMeta(attrsFPGA1);
    attrsFPGA1.type = MMU。描述符 Type_block;
    attrsFPGA1.sharedable = 2;//可共享
    attrsFPGA1.attrIndx = 1;//非高速缓存,设备内存
    Mmu.setSecondLevelDescMeta(0x01000000、0x01000000、attrsFPGA1);
    Mmu.setSecondLevelDescMeta(0x02000000、0x02000000、attrsFPGA1);

    var attatsFPGA2 =新 MMU。DescriptionAttrs();
    Mmu.initDescAttrsMeta(attrsFPGA2);
    attrsFPGA2.type = MMU。描述符 Type_block;
    attrsFPGA2.sharedable = 2;//可共享
    attrsFPGA2.attrIndx = 1;//非高速缓存,设备内存
    Mmu.setSecondLevelDescMeta(0x02000000、0x02000000、attrsFPGA2);
    Mmu.setSecondLevelDescMeta(0x03000000、0x03000000、attrsFPGA2);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    "I could read/Write to the FPGA when I stop in the _c_init00 means the bootloader initialized the GPMC correctly and I see the GPMC registers as as as as as a fp。"========>当您在_c_int00停止时,如何查看 R/W FPGA? 您是否有在其他内核上运行的单独程序? 您能否确认引导加载程序禁用高速缓存和 MMU?

    "在.cfg 中添加从_c_init00到 main 的代码后、我仍然可以看到 GPMC 寄存器、但我无法再读取/写入 FPGA。" =>可以确认 GPMC 寄存器与在_c_int00停止时的点相同吗? 也就是说、转到 main()的_c_int00不会更改 GPMC 寄存器?

    在.cfg 文件中、需要启用如下所示的功能
    //启用高速缓存
    cache.enableCache = true;

    //启用 MMU (L1/L2数据缓存所需)
    MM4.enableMMU = true;

    然后添加代码以设置存储器属性。

    如果同时禁用两者(以匹配在引导加载程序中设置的内容)
    cache.enableCache = false;
    MM4.enableMMU = false;
    并删除这些添加的代码以设置存储器属性。 您能否看到 GPMC 寄存器并能够向 FPGA 读/写数据? 如果是、您可以尝试是否启用高速缓存导致了故障。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我刚刚测试了这一点、仅启用缓存不会导致故障。
    只有当我启用 MMU 和高速缓存时、我们才会遇到问题。
    此致、
    密耳
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您的试用! 您能否告诉我、如果您只启用 MMU 而禁用高速缓存、您是否会遇到此问题? 非常感谢!

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我刚刚测试了 MMU 启用和高速缓存禁用选项、但仍然有问题。
    此致、
    密耳
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我们是否有解决方法来解决高速缓存问题?
    请告诉我。
    此致、
    密耳
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    处理器 SK RTOS 没有用于 AM57x 的 GPMC 驱动程序。 但 AM335x 有 GPMC 驱动程序、其中 EVM 在 NOR 闪存上具有 GPMC (在您的情况下是 FPGA)。

    在以下配置中、

    VAR Cache = xdc.useModule('ti.sysbios.family.arm.a8.Cache');

    cache.enableCache = true;

    VAR MMU = xdc.useModule('ti.sysbios.family.arm.a8.Mmu');

    MM4.enableMMU = true;

    /*强制外设部分为不可高速缓存的严格排序存储器*/

    VAR 外设 Attrs ={

      键入:MMU.FirstLevelDesc_section,//段描述符

      TEX:0、

      可缓冲:false,         //可缓冲

      可高速缓冲 :false,         //可缓存

      可共享 :false,         //可共享

      NoExecute :true,         //不可执行

    };

    /*定义外设所在的1Meg 页的基址。 *

    VAR norBaseAddr1 = 0x08000000;

    /*相应地配置相应的 MMU 页描述符*/

    Mmu.setFirstLevelDescMeta(norBaseAddr1、

                 norBaseAddr1、

                 peripheralAttrs);                            

    /*定义外设所在的1Meg 页的基址。 *

    /* var norBaseAddr2 = 0x09100000;*/

    VAR norBaseAddr2 = 0x08100000;

    /*相应地配置相应的 MMU 页描述符*/

    Mmu.setFirstLevelDescMeta(norBaseAddr2、

                 norBaseAddr2、

                 peripheralAttrs);                            

    您是否可以尝试 MMU 属性设置是否适用于您的案例? e2e.ti.com/.../am335x_5F00_app_5F00_icev2am335x.cfg

    此致、Eric

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我刚刚再次测试了这个、我在.cfg 中有下一个代码
    VAR Cache = xdc.useModule('ti.sysbios.family.arm.a15.Cache');
    VAR MMU = xdc.useModule('ti.sysbios.family.arm.a15.Mmu');

    //启用高速缓存
    cache.enableCache = true;

    //启用 MMU (L1/L2数据缓存所需)
    MM4.enableMMU = true;

    VAR atttrs = new MMU。DescriptionAttrs ();
    Mmu.initDescAttrsMeta(attrs);
    attrs.type = MMU。描述符 Type_block;
    attats.sharedable = 2;//可共享
    attrs.Indattrx = 1;//非高速缓存,设备内存
    Mmu.setSecondLevelDescMeta(0x50000000、0x50000000、attrs);
    Mmu.setSecondLevelDescMeta(0x50200000、0x50200000、attrs);


    //描述符属性结构
    var peripheralAttrs =新 MMU。DescriptionAttrs ();

    Mmu.initDescAttrsMeta(peripheralAttrs);

    peripheralAttrs.type = MMU。DescriptionorType_block;//块描述符
    peripheralAttrs.noExecute = true; //不可执行
    peripheralAttrs.accPerm = 0; //读取/写入 PL1
    peripheralAttrs.attrIndx = 1;//非高速缓存,设备内存
    // MAIR0 Byte1描述
    //的存储器属性
    //每个块 MMU 条目

    //定义 FPGA1的基地址
    VAR 外设 BaseAddr = 0x01000000;

    //相应地配置相应的 MMU 页描述符
    Mmu.setSecondLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);
    //定义 FPGA2的基地址
    VAR 外设 BaseAddr = 0x02000000;

    //相应地配置相应的 MMU 页描述符
    Mmu.setSecondLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);


    如果我启用缓存:

    //启用高速缓存
    cache.enableCache = true;

    //启用 MMU (L1/L2数据缓存所需)
    MM4.enableMMU = true;

    与以前一样、我仍然有问题无法读取/写入 FPGA。
    您能帮我解决这个问题吗?
    此致、
    密耳
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Milos、Eric、

    我怀疑我们在 SYSBIOS 配置中使用了不正确的 MMU 模块。 在介绍 SysBIOS 文档时、我注意到有两个不同的 MMU 模块:TI.sysbios.family.arm.a15.MMU 和 ti.sysbios.family.shared.vayu.MMU。 我们是否可以使用"Vayu"一个? 您能不能尝试看看它是否有用?

    Michael

    P.S>SYSBIOS 文档中提供了为 Vayu 配置 MMU 的示例:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Milos、

    您正在对正确的 MMU 模块(ti.sysbios.family.arm.a15.MMU)进行编程。 配置中可能会有损坏的东西。 您能否共享应用程序的*。cfg 文件?

    确定是否正确设置 MMU 的另一个快速方法是使用 ROV 验证 MMU 设置。 您可以尝试以下实验吗?

     步骤1:从"Tools"->"Debugger Options""->"Auto Run and Launch Options"窗口中禁用"Run to main"。

     步骤2:加载应用程序(它应该在_c_int00停止、而这次不是运行到 main)

     步骤3:在 ti_sysbios_family_arm_a15_MMU_enableAsm__i 处添加断点

     第4步:点击"run"并等待应用程序到达上述断点。 一旦达到断点、打开 ROV 并选择 MMU 视图。 在级别2选项卡下、您可以看到所关注的存储器区域的属性。 如果它们看起来正确、则 MMU 配置正常。 请注意、MMU ROV 视图有点慢、需要一些时间才能填充。 请耐心等待渲染。

    最棒的

    Ashish

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ashish、您好!

    我只是按照您建议的步骤操作、我看不到我的存储器区域。
    只有0x40000000和0x8000000区域。

    谢谢、
    密耳
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    发现 SYSBIOS .cfg 文件缺少设置第一级表说明。 下面是您需要执行的操作。 此外、TI 开发团队建议保持 MAIR0索引0、1、2不受默认值的影响。 您可以使用索引4、5、6、7。

    ====

    //描述符属性结构

    var peripheralAttrs =新 MMU。DescriptionAttrs ();

    Mmu.initDescAttrsMeta(peripheralAttrs);

    peripheralAttrs.type = MMU。描述符 Type_table;

    Mmu.setFirstLevelDescMeta(0、0、peripheralAttrs);

    peripheralAttrs.type = MMU。DescriptionorType_block;//块描述符

    peripheralAttrs.noExecute = true;//不可执行

    peripheralAttrs.accPerm = 0;//读取/写入 PL1

    peripheralAttrs.attrIndx = 4;//非高速缓存,设备内存

    // MAIR0 Byte1描述

    //的存储器属性

    //每个块 MMU 条目

    //在 mairRegAttr[2]中写入存储器区域属性,即 MAIR0寄存器字节2

    Mmu.setMAIRMeta(4、0x00);        

    //定义 FPGA1的基地址

    VAR 外设 BaseAddr = 0x01000000;

    //相应地配置相应的 MMU 页描述符

    Mmu.setSecondLevelDescMeta(peripheralBaseAddr、peripheralBaseAddr、peripheralAttrs);

    //定义 FPGA2的基地址

    VAR 外设 BaseAddr = 0x02000000;

    //相应地配置相应的 MMU 页描述符

    Mmu.setSecondLevelDescMeta(peripheralBaseAddr、peripheralBaseAddr、peripheralAttrs);

    ===========

    此致、Eric