V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
liyongjun0803
V2EX  ›  问与答

CPU 上电时是如何读取 SPI Flash 里面内容的,不需要驱动吗?

  •  
  •   liyongjun0803 · 2020-12-04 09:56:37 +08:00 · 1620 次点击
    这是一个创建于 1485 天前的主题,其中的信息可能已经有所发展或是发生改变。

    硬件的驱动都写在 uboot 或 kernel 里面,它们都是存储在 SPI Flash 中的,那么,CPU 刚上电时,不需要驱动来读取 SPI Flash 吗?

    6 条回复    2020-12-04 21:40:43 +08:00
    BingoXuan
        1
    BingoXuan  
       2020-12-04 10:07:26 +08:00   ❤️ 1
    我記得是 arm 不需要,cpu 上電後會通過自帶硬件讀取 flash 的程序到內存然後從特定內存位置開始
    zhujinliang
        2
    zhujinliang  
       2020-12-04 10:10:28 +08:00 via iPhone   ❤️ 1
    其实 CPU 内还有一块 ROM,固化了一段启动代码,作用大概就是读取配置字节或 GPIO 状态确定从哪些外设启动、搜索可用于启动的设备、从外设读出数据放到内存做第 1 阶段的引导
    第 1 阶段引导程序通常大小固定,只有 64K 或者 128K,用来加载 uboot 等引导程序
    liyongjun0803
        3
    liyongjun0803  
    OP
       2020-12-04 11:40:01 +08:00
    @zhujinliang 这段固化的启动代码,是不是根据 CPU (甚至主板) 自身设计的?我如果替换一颗 Flash,只要这颗 Flash 的基本参数和原来 Flash 一致,是否对 CPU 来说是无感的。这也就是为什么好多路由器玩家自己替换 Flash 也能够成功运行的原因吗?
    hjc4869
        4
    hjc4869  
       2020-12-04 13:21:16 +08:00   ❤️ 1
    bootrom 负责加载 SPI flash 里的 bootloader,bootrom 知道怎么初始化 SoC 上的 sd/emmc 或者 spi 控制器并且读取内容,至于怎么跟 spi flash 打交道,是 spi 控制器的事情。
    cmostuor
        5
    cmostuor  
       2020-12-04 15:06:29 +08:00   ❤️ 1
    机器上电后读取 spiflash 的内容有多种实现方式 你的驱动是指硬驱或软驱? 还是指操作系统层面的驱动? 硬驱实现方式是在 cpu 上电时通过复位信号让 spi 控制器从 0x0 地址读取到内存然后 CPU 在执行这过程纯硬件实现 软驱用 bootrom 简单的 bootrom 其实不过是让 spi 控制器从 0x0 地址开始读取数据到内存地址然后在跳转过去比如这个 https://github.com/kchhero/riscv-bootrom 复杂的比如这个 https://github.com/j-core/bootrom
    benmaowang
        6
    benmaowang  
       2020-12-04 21:40:43 +08:00   ❤️ 1
    SPI Flash 有个标准的读指令,CPU 上电后会自动读 N 字节到启动地址(一般映射到片内 RAM,或 Cache,或内存),然后跳转过去执行。
    所以 Flash 上起始地址会保存 uboot 等 bootload 程序,尽量在这 N 字节内做到把内存初始化,并实现把剩余的 boot 代码拷到内存。
    bootload 一旦运行起来,其它的就好办了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2642 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:53 · PVG 19:53 · LAX 03:53 · JFK 06:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.