本文适用与飞腾服务器平台CPU。在飞腾FT-2000+/64平台上验证可用。

1. 默认情况下,无法访问大于16MB空间的原因。

  1. 飞腾CPU的SPI控制器支持多个片选,读取数据的时候,CPU会按照设置的每个片选的地址空间,来自动切换片选。
    所以,需要先设置好每个片选的地址范围,防止访问的时候自动切换到其他片选。
    查看软件编程手册,发现有两个相关的寄存器,默认情况下,每个片选容量设置为16MB,自然无法访问大于16MB的内容。

  2. 16MB起始的地址为0x1000000,超过3字节,而一般SPI接口、flash默认使用3字节模式。所以需要配置字节模式为4字节模式。
    以Winbond的32MB flash W25Q256FV为例,默认情况下为3字节模式。可以通过命令方式切换到4字节模式,或者使用Extended Address Register 访问超出16MB的内容。

    飞腾CPU默认情况下也使用的3字节访问方式:

2. 解决办法

  1. Flash配置为四字节访问模式。不同型号的flash支持方式可能不同。
    W25Q256FV 支持三种方式,切换到4字节模式、使用extend 寄存器、使用4字节读写命令直接访问32bit的地址数据。
    Spansion的S25FL512S通过配置Bank Address Register来进行进行支持4字节模式或使用extend寄存器。
  2. SPI控制器使用4字节访问命令进行访问。
    飞腾CPU SPI接口支持地址映射方式访问与端口方式访问两种模式。
    实际测试中,地址映射方式访问时,直接发送4read(13)命令的方式访问即可。不需要特意先配置flash为4字节模式。
    端口访问方式也可以直接使用4字节读写命令。

而想验证是否一定需要切换flash到4字节模式时,读取flash的状态寄存器(Status Register-3),不知是否操作方式有问题,发现没有读出正确的值。暂时没有逻辑分析仪,无法抓取波形进行分析。所以flash是否需要主动切换到4字节模式,或是4字节读写时会自动切换,这个地方有待继续验证。




3. 验证过程

地址映射方式

  1. 配置CPU SPI配置寄存器,cmd_mode,addr_mode为四字节模式。

  2. 配置 Flash 容量设置寄存器,设置每个片选的容量为所需大小,如设置为1,配置为32MB。

  3. 配置CS1~CS3 起始地址配置寄存器,避免与CS0地址重叠。如CS1启示地址配置为0x2,那么默认起始地址为32MB之后。


FT-2000+/64平台 U-BOOT命令行下操作示例:

端口访问方式
读步骤:

  1. 命令端口寄存器bit[15:8]填入命令4read(0x13), bit [6]填1,带地址访问,bit[5]填1,使用4字节地址方式,bit[3:0]填入4,读写4字节。

  2. 地址端口寄存器填入访问的地址,如0x1000004

  3. 读取低位数据寄存器得到数据

u-boot操作示例:

读取到的0x1000004地址处的值与测试文件相同。

写步骤:

  1. 擦除对于地址的数据。
  2. 发送Write Enable命令。(方法为写步骤的3,替换命令为0x6,然后读一次低位数据寄存器触发)
  3. 命令端口寄存器bit[15:8]填入命令4write(0x12), bit [6]填1,带地址访问,bit[5]填1,使用4字节地址方式,bit[3:0]填入4,写4字节。
  4. 地址端口寄存器填入要写的地址,如0x1000004
  5. 高位/低位数据寄存器填入要写入的数据
    写示例:
    下图中三个框依次为:发送Write Enable命令,写数据0到0x100004,读数据确认是否写为0。

飞腾CPU访问16MB以上容量FLASH的方法相关推荐

  1. 飞腾CPU体系结构(十二)

    飞腾CPU体系结构(十二) 1. CPU物理地址空间 飞腾CPU支持的物理地址宽度为44位,物理地址空间实际上只有16TB.系统主存(芯片外部内存)和IO外设(例如SoC设备.PCIe设备)都在这个物 ...

  2. 飞腾CPU体系结构简单介绍(一)

    第一章 飞腾CPU体系结构简介 ARM体系结构是一种精简指令集体系结构RISC,具有以下基本特点:通用寄存器数量较多:采用统一寻址模式,系统主存和外设分布在CPU物理地址空间的不同范围:采用load/ ...

  3. 为什么 CPU 访问硬盘很慢

    为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...

  4. 为什么 CPU 访问硬盘很慢?

    为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...

  5. 常识分析 | 为什么 CPU 访问硬盘很慢

    为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...

  6. 飞腾CPU体系结构之虚拟地址

    飞腾CPU体系结构之虚拟地址 1. 基本概念 虚拟地址:程序运行时指令和数据对应的地址. 虚拟地址空间:一个进程运行时指令和数据能访问到的虚拟地址范围. 注意事项: 每个进程拥有自己的虚拟地址空间,进 ...

  7. 飞腾CPU虚拟化相关代码分析(一)

    飞腾CPU虚拟化相关代码分析(一)-- 函数el2_setup 函数el2_setup是ARM64体系结构下Linux内核运行的第一个和虚拟化相关的函数. 相关概念 ARM64支持两种虚拟方式:Hyp ...

  8. 飞腾CPU相关寄存器描述(持续更新)

    飞腾CPU相关寄存器描述(持续更新) SPSel堆栈寄存器选择寄存器 EL1/2/3都可以读写 32位长度. SP, bit[0], 控制堆栈寄存器的选择. 0-->CPU无论处于什么权限级,堆 ...

  9. 飞腾CPU体系结构(一)

    第一节 CPU体系结构 1.1 CPU体系结构定义 CPU体系结构可以指基于某一类CPU的计算机硬件系统给运行于其之上的软件提供的接口和界面. 从程序员的角度来看,CPU体系结构是指程序员能观察到的基 ...

最新文章

  1. 双目视觉惯性里程计的在线初始化与自标定算法
  2. Spark1.4 和 Hive 1.1.1 启动错误
  3. Linux 下的 hosts文件
  4. Springboot国际化信息(i18n)解析
  5. 2020财富中国500强:京东位列第13,阿里位列第18
  6. FFmpeg流媒体调试工具(六)
  7. linux 中软件安装的三种方法
  8. 关于搭建k8s集群遇到的问题与解决方法
  9. 【基础教程】Python的特点(优点和缺点)
  10. 解决SVN Can’t open file ‘/XXX/xxx/db/txn-current-lock’错误
  11. 使用easywechat给关注公众号用户发消息
  12. 学习PerfDog安卓(Android)APP的性能测试(1)
  13. 2022-7-8 Leetcode 904.水果成篮
  14. 谓词逻辑在计算机中的,谓词逻辑与归纳原理1.ppt
  15. Deep Snake for Real-Time Instance Segmentation:基于Deep Snake的实例实时分割
  16. 两个小时教你明白C++中类型转换关系
  17. com.alibaba.otter.canal.protocol.exception.CanalClientException
  18. Tableau服务器部署方案
  19. MongoDB入门(1)- MongoDB简介
  20. 圆柱底面周长面积c语言,编写一个程序,从键盘输入圆的半径r,圆柱的高h,分别计算出圆周长cl、圆面积cs和圆柱的体积cv,输出计算结果时要求保留小数点后4位...

热门文章

  1. Excel VBA小程序01-将多个sheet表另存为单独的工作薄文件并清除原表数据
  2. 恒盛策略|短线尾盘选股技巧?
  3. HTML5-web通信之 Cross-Document Messaging(XDM) Channel Messaging
  4. Docker启动镜像并进行端口映射
  5. Isomap算法推导
  6. 分布式消息通信 ActiveMQ 原理 分析二
  7. 金蝶工业单据插件常用方法
  8. 金蝶 列表插件,引入Excel-1,添加按钮,导入界面
  9. 凡客“怒放体”走红,汪峰会不会很“嫉妒”?
  10. 跑步运动耳机哪个牌子好、适合运动的耳机