映射外部存储设备

时间:2019-04-18 08:18:18

标签: gcc memory linker arm cortex-m

我正在使用GCC工具链和ARM Cortex-M0 uC。我想问一下是否有可能在链接器中定义一个空间,以便读写操作将调用外部设备驱动程序函数来读写空间(例如SPI内存)。谁能给出一些提示该怎么做? 问候,拉法尔

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

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

1 个答案:

答案 0 :(得分:0)

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

目前尚不清楚您要实现的目标。如果您已将SPI存储器连接到芯片外部,则必须使用驱动程序执行所有访问,因此无法通过存储器映射SPI端口抽象。

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

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