HISI3520DV300 折腾记录(二)之《内存映射、存储(DDRC,FMC)、启动模式分析》
PS:要转载请注明出处,本人版权所有。
PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。
前置说明
本文作为本人csdn blog的主站的备份。(BlogID=056)
本文发布于 2018-03-10 10:12:11,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=056)
环境说明
无
前言
此文分析基于某HISI3520DV300单板以及所带的datasheet
启动分析
关于其启动方式有如图说明:
解释:支持bootrom和SPI Flash两种启动方式,由BOOTROM_SEL引脚决定。bootrom是海思已经写好的程序烧写在里面,支持和其自身所写的PC软件进行串口通信。
存储模块(DDRC,FMC)
DDRC(hisi3520dv300 支持16bit数据读写)
SDRAM信息:
- 此板子的SDRAM型号为:k4b2g1646q-bck0
- 此SDRAM相关信息如图:
- 容量:2Gbit (就是256MByte)
- 数据宽度:16bit
- banks:8
- 每bank大小:128MBbit
DDRC信息:
连线:
地址线分配:
- DDR_BA:3bit
- DDR_R:14bit
- DDR_C:10
并且只支持RBC地址映射模式(行地址+bank+列地址+数据宽度)
于是此板子SDRAM:2^(14+3+10+1)=256MB
FMC
NAND信息:
- 此板子NAND型号为:mx25l256fz2
- 此型号相关信息为:
FMC信息:
于是此板子NAND大小为256MBits
内存映射(最重要,所有的一切都基于此)
地址映射图:
关于0x8000 0000---0xFFFF FFFF此地址空间是分配给SDRAM用的(也就是我们说的内存)
关于0x0000 0000---0x03FF FFFF:
- 在地址映射时:这64MB指向启动地址空间。
- 在地址映射取消时:指向片内的16KB 空间。
下文纯属我的“猜测”,因为其提供的文档说明极不详细:
首先关于其Start.S的某段:
normal_start_flow:
@if running not boot from spi/nand/ddr ram,
@we skipping boot_type checking.
/*
0x1400_0000:SFC NAND/NOR MEMORY
地址空间
*/
mov r0, pc, lsr#24
cmp r0, #0x0
bne do_clr_remap
check_boot_type:
ldr r0, =SYS_CTRL_REG_BASE
ldr r0, [r0, #REG_SYSSTAT]
mov r6, r0, lsr#4
and r6, #0x1
/*
此处可能有个错误,按照datasheet应该右移31bit才行
*/
cmp r6, #0 @ [4] = 0 FMC /* spi nor | spi nand */
ldreq pc, _clr_remap_fmc_entry
/*
这里应该永久跳转才对,不然就卡死了。结合下文内容,感觉应该右移31位才对。
*/
@otherwise, [31]=1 means boot from bootrom, err
beq bug
文中的REG_SYSSTAT寄存器在datasheet中的说明如下:
关于“”启动地址空间“这个词语,我猜测是来至于:0x1400 0000---0x14FF FFFF
关于其FMC还有一句话:
这部分说:CPU可以直接读取的最大1MB的数据。
所以对于NAND,直接上电时,NAND器件中的16MB被硬件默认映射到0x1400 0000---0x14FF FFFF这个地址(或者换句话说:0x1400 0000---0x14FF FFFF就是NAND器件中起始16MB这时候的地址),且当cpu上电时,根据内存映射寄存器的值,确定默认是开启内存映射的,于是,0x1400 0000---0x14FF FFFF被映射到了0x0000 0000 0x00FF FFFF中,这个时候PC指向0x0000 0000 开始执行指令。也就是前文所说的:b reset
注意:以上关于NAND启动原理,纯属我的猜测,因为它的datasheet文档确实感觉不够详细。
后记
无
参考文献
- 无
打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)
PS: 请尊重原创,不喜勿喷。
PS: 要转载请注明出处,本人版权所有。
PS: 有问题请留言,看到后我会第一时间回复。
HISI3520DV300 折腾记录(二)之《内存映射、存储(DDRC,FMC)、启动模式分析》的更多相关文章
- redis底层设计(二)——内存映射数据结构
我们继续接着上一篇博客,今天来看看内存映射数据结构. 上篇我们讲了内部数据结构,虽然内部数据结构非常强大,但是创建一系列完整的数据结构本身也是一件相当耗费时间的工作,当一个对象包含的元素数量并不多,或 ...
- C#学习记录二:高级数据存储方式
1,结构 结构和类的区别主要在于存储和访问方式,结构是一种值 数据类型,而类是一一种引用数据类型.所谓值数据类型存储个人理解是存在堆里面的,所谓引用数据类型存储在了栈里面,相当于存储了一个指针. 结构 ...
- ZT 匿名内存映射
mmap函数使用 分类: Linux/Unix C/C++ 2008-01-22 17:03 6089人阅读 评论(1) 收藏 举报 unix编程null网络 UNIX网络编程第二卷进程间通信对mma ...
- 共享内存与存储映射(mmap)
[前言]对这两个理解还是不够深刻,写一篇博客来记录一下. 首先关于共享内存的链接:共享内存.里面包含了创建共享内存区域的函数,以及两个进程怎么挂载共享内存通信,分离.释放共享内存. 共享内存的好处就是 ...
- 《Java核心技术卷二》笔记(二)文件操作和内存映射文件
文件操作 上一篇已经总结了流操作,其中也包括文件的读写.文件系统除了读写以为还有很多其他的操作,如复制.移动.删除.目录浏览.属性读写等.在Java7之前,一直使用File类用于文件的操作.Java7 ...
- 高端内存映射之kmap持久内核映射--Linux内存管理(二十)
1 高端内存与内核映射 尽管vmalloc函数族可用于从高端内存域向内核映射页帧(这些在内核空间中通常是无法直接看到的), 但这并不是这些函数的实际用途. 重要的是强调以下事实 : 内核提供了其他函数 ...
- Java编程的逻辑 (61) - 内存映射文件及其应用 - 实现一个简单的消息队列
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...
- Linux驱动mmap内存映射
mmap在linux哪里? 什么是mmap? 上图说了,mmap是操作这些设备的一种方法,所谓操作设备,比如IO端口(点亮一个LED).LCD控制器.磁盘控制器,实际上就是往设备的物理地址读写数据. ...
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案
C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...
随机推荐
- Java并发(五)----线程常见方法总结
常见方法 方法名 static 功能说明 注意 start() 启动一个新线程,在新的线程运行 run 方法中的代码 start 方法只是让线程进入就绪,里面代码不一定立刻运行(CPU 的时间片还 ...
- vue 导出多页pdf, window.print()实现
如果你对分页打印没思路,而网上的现成方案又不适合,不妨进来看看,也许会对你有帮助. 由于工作环境是局域网,对于插件的安装有限制,所以排除了jspdf + html2canvas的实现方式:采用wind ...
- .NET Core开发实战(第16课:选项数据热更新:让服务感知配置的变化)--学习笔记
16 | 选项数据热更新:让服务感知配置的变化 选项框架还有两个关键类型: 1.IOptionsMonitor 2.IOptionsSnapshot 场景: 1.范围作用域类型使用 IOptinsSn ...
- C++文件输入输出的简单实现(Debug)
1.前言: 文件输入输出是个很有用的东西,有时比赛时要有:要求使用文件输入输出,还有时候-- 遇到这种时间限制非常恶心的题目:手动测试会有误差-- 文件输入输出是个很好的选择! 2.写法: C C语言 ...
- Ehcache 3.x 笔记
现在Ehcache版本已经到3.10了, 网上查到的大部分还是2.x版本的使用说明, 把基础用法记了一下, 以后有时间再翻译. 基础使用, 创建 CacheManager CacheManager c ...
- React中的纯组件
React中的纯组件 React提供了一种基于浅比较模式来确定是否应该重新渲染组件的类React.PureComponent,通常只需要继承React.PureComponent就可以定义一个纯组件. ...
- SpringBoot+Shiro+LayUI权限管理系统项目-7.实现用户管理
1.说明 只讲解关键部分,详细看源码,文章下方捐赠或QQ联系捐赠获取. 2.功能展示 包括用户增删改查和分配角色. 3.业务模型 @Data @EqualsAndHashCode(callSuper ...
- 图文并茂之AES加密
本文改编自:http://www.sohu.com/a/198681357_505794 假设有一个发送方在向接收方发送消息.如果没有任何加密算法,接收方发送的是一个明文消息:"我是小灰&q ...
- windows 上 cmake 添加 vcpkg 选项
使用 cmake 编写相关的工程时,工程有时会使用 vcpkg 添加的第三方库,比如 zip 库 查看一些案例后,我发现有些回答不太准确,遂记录下 现在,我们需要在工程中使用 zip_open 函数执 ...
- 深入理解Go语言(03):scheduler调度器 - 基本介绍
一:什么是调度 平常我们在生活中会有哪些调度的例子呢?比如十字路口的红绿灯,它就是一种调度系统.在交通十字路口,每个路口上多多少少有一些车辆,为了限制这些车辆不随意行驶,就建起了红绿灯调度系统.红绿灯 ...