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.

LP-AM243: OSPI寄存器疑问

Part Number: LP-AM243


1Ch OSPI_IND_AHB_ADDR_TRIGGER_REG Indirect trigger address register 0FC4 001Ch

24h OSPI_REMAP_ADDR_REG Address remapping register                            0FC4 0024h

80h OSPI_INDIRECT_TRIGGER_ADDR_RANGE_REG Indirect trigger address range register 0FC4 0080h

OSPI_REMAP_ADDR_REG,应该时内存映射地址设置,0x6000_0000

OSPI_IND_AHB_ADDR_TRIGGER_REG,应该是间接读写Flash时的触发地址

OSPI_INDIRECT_TRIGGER_ADDR_RANGE_REG,应该是间接读写Flash时的触发地址范围

按我的理解,比如我设置内存映射地址为0x6000_0000,触发地址为0x7000_1000,触发地址范围为0x1000,

那么我在读写Flash时,如果读写0x7000_1200,就可以读写Flash的0x6000_1200空间,但事实是,设置这些寄存器,没有任何反应

看TI公司官方SDK源码发现,

CSL_REG32_WR(&pReg->IND_AHB_ADDR_TRIGGER_REG, 0);
CSL_REG32_WR(&pReg->INDIRECT_TRIGGER_ADDR_RANGE_REG, OSPI_utilLog2(128));

读写Flash时,只能读写0x6000_0000,才能操作SRAM Fifo,实现间接读写功能,请专家们帮忙解释一下,谢谢

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 好的,谢谢

    请问这个问题的英文版地址是什么

  • 您好,

    为了更好地解决您的问题,您是否方便提供以下信息:

    1. 请问与 AM243x 搭配使用的闪存是?
    2. 与闪存连接的原理图可以提供下吗?
    3. 在应用期间,能否提供下 OSPI 部分的完整寄存器转储?
  • Flash闪存是GD25Q128E

    这是OSPI模块寄存器设置

    我主要想知道,内存映射地址设置寄存器,间接触发地址寄存器,间接触发地址范围寄存器,这几个寄存器到底什么意义,如何应用,我上面出现的现象,是什么原因,谢谢

  • 好的,我们需要跟进给工程师看下,有答复尽快给到您。

  • 您好,

    您可在TRM中找到这些寄存器的含义及预期功能:

    “OSPI_IND_AHB_ADDR_TRIGGER_REG: This register allows to define the address distinguishing DAC access from triggered INDAC one.
    When the incoming data read/write access address matches a range of addresses from this trigger address to the trigger address + [configured range in OSPI_INDIRECT_TRIGGER_ADDR_RANGE_REG]

    OSPI_REMAP_ADDR_REG: This register allows to define the address offset for DAC (Direct Access Controller) accesses. This register is used to remap an incoming data address to a different address used by the FLASH device.

    OSPI_INDIRECT_TRIGGER_ADDR_RANGE_REG: This register allows the user to define the indirect trigger address range. If the configured range exceeds number of bytes programmed for particular indirect transfer, there is no need to detect indirect trigger address boundaries by software.”

    并非所有寄存器都与 INDAC (间接访问控制器)通信模式有关。 第12.3.2.4.10节 OSPI 间接访问控制器(INDAC)及其第12.3.2.4.10.1节间接读取控制器和12.3.2.4.10.2间接写入控制器介绍了间接读取和写入的过程,其中包含了需要配置哪些寄存器来确保正确的间接通信的相关信息。 

  • 比如NorFlash有64MB,我这样设置,OSPI_IND_AHB_ADDR_TRIGGER_REG=0x5001_0000,OSPI_INDIRECT_TRIGGER_ADDR_RANGE_REG=6,OSPI_REMAP_ADDR_REG=0x5002_0000,那我如何确定是DAC还是INDAC访问呢?比如我读写0x5001_0010,0x5000_0200,0x5030_0400,0x6010_1030,0x7300_0100,0x9500_2300,这几个,哪个会触发DAC访问,哪个是INDAC访问?如果我要写Flash的0x100位置,该如何操作和设置?谢谢

  • 您好,

    区分DAC 和 INDAC 地址之间唯一的方法是,查看地址在其中是否被指定定义为 INDAC address的地址范围的一部分。 TRM 指出: 

    也就是说,每个不在以下指定范围内的地址,都将被视为 DAC 地址: 

    OSPI_IND_AHB_ADDR_TRIGGER_REG[ADDR_FLD] + (OSPI_INDIRECT_TRIGGER_ADDR_RANGE_REG[IND_RANGE_WIDTH_FLD] - 1)

    此外,请记住以下几点:间接触发地址与闪存地址没有任何关系。 它只是为了在触发任何有效的间接读取/写入后,数据应该使 SRAM 作为源而不是闪存阵列。

    间接读取/写入的闪存地址取自 OSPI_INDIRECT_READ_XFER_START_REG/OSPI_INDIRECT_WRITE_XFER_START_REG寄存器。

    考虑到以上信息,如果您是想写入闪存地址位置0x100,那么该值应在OSPI_INDIRECT_WRITE_XFER_START_REG 寄存器中指定。

    TRM 中详细介绍了如何设置间接写入(12.3.2.4.10.2.1 Indirect Write Transfer Process),如下所示:

  • SDK源码,实际操作和我们理解的不一样,触发地址OSPI_IND_AHB_ADDR_TRIGGER_REG=0,按理说,应该是0x6000_0000才对。

    我做过实验,OSPI_IND_AHB_ADDR_TRIGGER_REG=0x6000_0000,OSPI_INDIRECT_TRIGGER_ADDR_RANGE_REG=7,然后往0x6000_0000~0x6000_0080范围比如0x6000_0004写如数据,就无法成功写入,必须OSPI_IND_AHB_ADDR_TRIGGER_REG=0才行

    这就是我最疑惑不解的,始终没搞明白....

  • 好的我们跟进给工程师看下哈。