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.

[参考译文] AM2434:GPMC 对非缓存写入执行附加的虚拟访问

Guru**** 2394295 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1430620/am2434-gpmc-performs-additional-dummy-access-on-non-cached-writes

器件型号:AM2434

工具与软件:

你(们)好

在禁用高速缓存的异步操作中、GPMC 写入、例如*((uint32_t*) 0x50000000u)= 0xAAAAAAAAAAU;生成不应存在的虚拟访问。 它包含一个始终伴随预期写操作且没有 Ren 或 WEn 有效的访问。 在任何访问大小(8、16或32位)下都会发生该错误。

为什么会发生这种情况? 这是已知行为吗? 是否可以避免这种虚拟访问?

此致、

Luís μ A

GPMC 配置如下:

/* CONFIG1寄存器配置*/
// WRAPBURST[31]= 0 =不支持同步换行突发
// READMULTIPLE[30]= 0 =单次访问
// READTYPE[29]= 0 =读取异步
// WRITEEMULTIPLE[28]= 0 =单次访问
// WRITETYPE[27]= 0 =写入异步
// CLKACTIVATIONTIME[26:25]= 00 =开始访问时间 GPMC CLK 的第一个上升沿
// ATTACHEDDEVICEPAGELENGTH[24:23]= 00 = 4个字
// WAITREADMONITORING[22]= 0 =不监控 WAIT 引脚的读取访问
// WAITWRITEMONITORING[21]= 0 =对 WAIT 引脚的写访问不进行监控
// WAITMONITORINGTIME[19:18]= 00 = WAIT 引脚被有效数据监视
// WAITPINSELECT[17:16]= 00 =等待输入引脚为 WAIT0
// devicesize[13:12]= 10 = 32位
// DEVICETYPE[11:10]= 00 = NOR 类闪存、异步和同步器件
// MUXADDDATA[9:8]= 10 =地址和数据多路复用连接器件
// TIMEPARAGRANULARITY[4]= 0 = x1延迟
// GPMCFCLKDIVIDER [1:0]= 11 = GPMC_FCLK 频率/4

/* CONFIG2 register config */
// CSWROFFTIME[20:16]= 00010 = 2 GPMC_FCLK 周期[从写入访问的起始周期开始的 CSI 无效时间]
// CSRDOFFTIME[12:8]= 00010 = 2 GPMC_FCLK 周期[从读取访问的启动周期开始的 CSI 无效时间]
// CSEXTRADELAY[7]= 0 = CSI 时序控制信号不延迟
// CSONTIME[3:0]= 0000 = 0 GPMC_FCLK 周期[从启动周期开始的 CSI 生效时间]

/* CONFIG3 register config */
// ADVAADMUXWROFFTIME[30:28]= 000 = 0 GPMC_FCLK 周期
// ADVAADMUXRDOFFTIME[26:24]= 000 = 0 GPMC_FCLK 周期
// ADVWROFFTIME[20:16]= 00000 = 0 GPMC_FCLK 周期[nADV 从写入访问的启动周期时间开始的置为无效时间]
// ADVRDOFFTIME[12:8]= 00000 = 0 GPMC_FCLK 周期[nADV 从读取访问的启动周期时间开始的置为无效时间]
// ADVEXTRADELAY[7]= 0 = nADV 时序控制信号不延迟
// ADVAADMUXONTIME[6:4]= 000 = 0 GPMC_FCLK 周期
// ADVONTIME[3:0]= 0001 = 1 GPMC_FCLK 周期[nADV 从启动周期开始的置位时间]

/* CONFIG4寄存器配置*/
// WEOFFTIME[28:24]= 00010 = 2 GPMC_FCLK 周期[nWE 从启动周期开始的置为无效时间]
// WEEXTRADELAY[23]= 0 = nWE 时序控制信号不延迟
// WEONTIME[19:16]= 0001 = 1 GPMC_FCLK 周期[nWE 从启动周期开始置位时间]
// OEAADMUX_OFFTIME[15:13]= 000 = 0 GPMC_FCLK 周期
// OEOFFTIME[12:8]= 00010 = 2 GPMC_FCLK 周期[从启动周期开始的 NOE 置为无效时间]
// OEEXTRADELAY[7]= 0 = nOE 时序控制信号不延迟
// OEAADMUX_ONTIME[6:4]= 000 = 0 GPMC_FCLK 周期
// OEONTIME[3:0]= 0000 = 0 GPMC_FCLK 周期[NOE 从启动周期开始的置位时间]

/* CONFIG5寄存器配置*/
// PAGEBURSTACESSTIME[27:24]= 0000 = 0 GPMC_FCLK 周期
// RDACCESSTIME[20:16]= 00010 = 2 GPMC_FCLK 周期[开始周期时间与第一个数据有效之间的延迟]
// WRCYCLETIME[12:8]= 00010 = 2 GPMC_FCLK 周期[总写入周期时间]
// RDCYCLETIME[4:0]= 00010 = 2 GPMC_FCLK 周期[总读取周期时间]

/* CONFIG6寄存器配置*/
// reserved[31]= 1h = TI 内部使用-请勿修改
// WRACCESSTIME[28:24]= 00001 = 1 GPMC_FCLK 周期[从开始访问时间到 GPMC_FCLK 上升沿的延迟(对应于连接的存储器用于第一次数据采集的 GPMC CLK 上升沿)]
// WRDATAONADMUXBUS[19:16]= 0001 = 1 GPMC_FCLK 周期[指定在哪个 GPMC_FCLK 上升沿在加法/数据多路复用器总线上驱动写入的第一个数据]
// CYCLE2CYCLEDELAY[11:8]= 0001 = 1 GPMC_FCLK 周期[连续访问之间的芯片选择高脉冲延迟]
// CYCLE2CYCLESAMECCS[7]= 1 =添加 CYCLE2CYCLEDELAY [在连续访问同一芯片选择之间添加 CYCLE2CYCLEDELAY (任何访问类型)]
// CYCLE2CYCLEDIFFCSE[6]= 1 =添加 CYCLE2CYCLEDELAY [在连续访问不同芯片选择(任何访问类型)之间添加 CYCLE2CYCLEDELAY ]
// BUSTURNAROUND[3:0]= 0000 = 0 GPMC_FCLK 周期[对同一芯片选择(读取到写入)或对不同芯片选择(读取到读取到写入)的连续访问之间的总线转换延迟]

/* CONFIG7寄存器配置*/
// MASKADDRESS[11:8]= 1111 = 16MB 的芯片选择大小
// CSVALID[6]= 1 = CS 启用
// BASEADDRESS[5:0]= 010000 =基址为0x50000000 (位[31:30]始终为01、位[29:24]在此处指定)

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

    您好、Luís

    我正在查看您的问题,您可能希望在一两天内得到回复。

    此致、

    Anil。

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

    您好、Luís

    您能否确认如何在上述测试案例中禁用缓存?

    我们 从未 见过 这种行为。

    我是否知道有任何理由禁用高速缓存?

    此致、

    Anil。