【问题标题】:Mapping external memory device映射外部存储设备
【发布时间】:2019-04-18 08:18:17
【问题描述】:

我正在使用 GCC 工具链和 ARM Cortex-M0 uC。我想问是否可以在链接器中定义一个空间,以便读写操作会调用外部设备驱动程序函数来读写它的空间(例如SPI内存)。任何人都可以给出一些提示如何做到这一点? 问候,拉法尔

编辑: 感谢您的 cmets 和回复。我的设置是: 随机访问 SPI 内存通过 SPI 控制器连接,我使用“标准”驱动程序访问内存空间并从中存储/读取数据。

我想要做的是避免显式调用驱动程序的函数,而是将它们隐藏在某个固定的 RAM 地址后面,以便对该地址的任何读取都会调用 spi 读取内存驱动程序函数,而写入会调用 spi 写入内存函数(初始地址的偏移量将是外部存储器中数据的地址)。我怀疑在没有 MMU 的 uC 中是否有可能,但我认为询问其他可能有类似想法的人总是值得的。

【问题讨论】:

  • spi 很少以这种方式映射,您必须通过 spi 控制器进行通信。可能有极少数例外,但到目前为止我还没有在单片机中看到过这样的例外。
  • cortex-m 与 spi 无关,它是 arm 的核心。芯片公司增加了 spi 控制器(st、atmel、ti 等)。所以这不是皮质-m 问题,也不是手臂问题。
  • 如果您想知道如何控制链接器,那么如果您展示您尝试过的内容,这是一个公平的问题。但如果这是一个 spi 问题,那么 gcc 和链接器等也不是相关标签。

标签: gcc memory linker arm cortex-m


【解决方案1】:

不,这不是它的工作方式。 Cortex-M0 没有内存管理单元,因此无法拦截对特定内存区域的访问。

目前还不清楚您要达到的目标。如果您在芯片外部连接了 SPI 存储器,则必须使用驱动程序执行所有访问,无法对 SPI 端口抽象进行存储器映射。

如果这是一个设备上的 SPI 内存控制器,它将在内存映射中具有两个区域。一个是“内存”区域,可能是只读的,一个是内存控制器硬件的控制寄存器,设备驱动程序与这些寄存器通信。具体来说,要写入 SPI,您需要执行驱动程序访问来执行写入。

在极端情况下(例如 Xilinx 的 Cortex-M1),将有一个用于内存映射行为的 eXecute In Place (XIP) 外设,以及一个用于读/写功能的 SPI 主设备。 GPIO 引脚用于在“内存模式”和“配置模式”之间复用 SPI EEPROM 引脚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    相关资源
    最近更新 更多