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)、启动模式分析》的更多相关文章

  1. redis底层设计(二)——内存映射数据结构

    我们继续接着上一篇博客,今天来看看内存映射数据结构. 上篇我们讲了内部数据结构,虽然内部数据结构非常强大,但是创建一系列完整的数据结构本身也是一件相当耗费时间的工作,当一个对象包含的元素数量并不多,或 ...

  2. C#学习记录二:高级数据存储方式

    1,结构 结构和类的区别主要在于存储和访问方式,结构是一种值 数据类型,而类是一一种引用数据类型.所谓值数据类型存储个人理解是存在堆里面的,所谓引用数据类型存储在了栈里面,相当于存储了一个指针. 结构 ...

  3. ZT 匿名内存映射

    mmap函数使用 分类: Linux/Unix C/C++ 2008-01-22 17:03 6089人阅读 评论(1) 收藏 举报 unix编程null网络 UNIX网络编程第二卷进程间通信对mma ...

  4. 共享内存与存储映射(mmap)

    [前言]对这两个理解还是不够深刻,写一篇博客来记录一下. 首先关于共享内存的链接:共享内存.里面包含了创建共享内存区域的函数,以及两个进程怎么挂载共享内存通信,分离.释放共享内存. 共享内存的好处就是 ...

  5. 《Java核心技术卷二》笔记(二)文件操作和内存映射文件

    文件操作 上一篇已经总结了流操作,其中也包括文件的读写.文件系统除了读写以为还有很多其他的操作,如复制.移动.删除.目录浏览.属性读写等.在Java7之前,一直使用File类用于文件的操作.Java7 ...

  6. 高端内存映射之kmap持久内核映射--Linux内存管理(二十)

    1 高端内存与内核映射 尽管vmalloc函数族可用于从高端内存域向内核映射页帧(这些在内核空间中通常是无法直接看到的), 但这并不是这些函数的实际用途. 重要的是强调以下事实 : 内核提供了其他函数 ...

  7. Java编程的逻辑 (61) - 内存映射文件及其应用 - 实现一个简单的消息队列

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  8. 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

  9. Linux驱动mmap内存映射

    mmap在linux哪里? 什么是mmap? 上图说了,mmap是操作这些设备的一种方法,所谓操作设备,比如IO端口(点亮一个LED).LCD控制器.磁盘控制器,实际上就是往设备的物理地址读写数据. ...

  10. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案

    C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...

随机推荐

  1. 使用私有gitlab搭建gitbook持续集成

    目录 环境搭建 1. 安装 Node.js 2. 安装 gitbook 3. 安装 Gitlab Runner 4. 注册Runner gitbook 配置 1. 目录结构 2. 命令行 3. 插件 ...

  2. 零基础入门Vue之皇帝的新衣——样式绑定

    回顾 大致掌握了上一节的 插值语法 我已经可以把想要的数据显示到页面上,并且仅需要修改变量,页面就会跟着实时改变 但如果对于已经熟悉前端的人来说,单单有数据还是不太行,还需要css对数据进行样式的修饰 ...

  3. 洛谷P1045 麦森数。 快速幂算法以及固定位数的高精度乘法的优化

    P1045 [NOIP2003 普及组] 麦森数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 想法很简单,我们要做的就是两件事,求2^P-1的位数,求出2^P-1的最后500位数 ...

  4. Flink-启动后无法访问WebUI界面(Flink1.16)

    问题描述 通过./bin/start-cluster.sh启动Flink程序,正常启动后无法通过浏览器访问web UI界面,http://192.168.80.133:8081. 问题原因 Flink ...

  5. NC24141 [USACO 2011 Dec G]Grass Planting

    题目链接 题目 题目描述 Farmer John has N barren pastures (2 <= N <= 100,000) connected by N-1 bidirectio ...

  6. Linux常用的20个命令(上)

    无论你是后端程序员还是前端程序员,都避免不了和Linux打交道.Linux的命令有很多,这里仅介绍常用的20个,方便快速查看,也欢迎大家作补充. 1.mkdir 命令 make directories ...

  7. 当我忘记SQL怎么写的时候,我……

    当我忘记SQL怎么写的时候,我-- 以往的我,打开电脑百度一番,打开笔记查询一轮,发现没找到我最想要的 不要慌,问题不大 后来发现MySQL本身就带有帮助文档. 于是我一顿操作:win+R >& ...

  8. 【framework】WMS启动流程

    1 前言 ​ WMS 是 WindowManagerService 的简称. (1)WMS 主要职责 窗口管理:负责启动.添加.删除窗口,管理窗口大小.层级,核心成员有:WindowContainer ...

  9. 解决etcd集群空间占用问题 mvcc: database space exceeded

    一.查看状态 ./etcdctl --write-out=table endpoint status 可以看到空间占用(DB SIZE).本次是清理过了.原本达到了2G(为默认上限) 二.查看当前版本 ...

  10. 系统环境变量中 HTTPS_PROXY 的误区

    前段时间在测试一个连麦 demo,demo 简要说可以在内网环境中运行时,输入频道号就可以模拟连麦 但是在加入连麦时,一直返回错误 -2 EOF,询问得知,该错误的解释信息是"Service ...