认识众多玩家高手/拆客/DIYer,查阅更多资源,一起学习技术知识

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

本帖最后由 qq1329491328 于 2020-5-2 16:06 编辑

ARM11内核之TQ6410/OK6410裸机LCD刷屏程序借助UBOOT来执行

B站视频地址:https://www.bilibili.com/video/BV1ep4y1979k

来来回回差不多搞了一个月了,在没有全部资料情况下自己搞了这么久也算很开心啦!

33.gif (2.61 MB, 下载次数: 2)

2020-5-2 15:48 上传

1.png (46.14 KB, 下载次数: 0)

2020-5-2 16:05 上传

2.png (51.38 KB, 下载次数: 0)

2020-5-2 16:05 上传

3.png (49.35 KB, 下载次数: 0)

2020-5-2 16:05 上传

1.1 存储器结构

存储子系统结构如下图所示。6410的存储系统包括两个内部存储器和两个外部存储器端口(参用户手册1.1节、2.1节、4.3节):

S3C6410存储系统结构图

11.png (85.14 KB, 下载次数: 0)

2020-5-2 15:56 上传

内部存储器即集成在芯片内部的存储器,有

Internal ROM

Internal RAM

两个外部存储器端口支持外接存储器

Memory Port0(Flash/ROM):

片选引脚Xm0CSn[5:0],128M×6Banks。

支持SROM控制器(支持SRAM、ROM、NOR Flash)、OneNAND控制器(支持OneNAND Flash)、NAND控制器(支持NAND Flash)和CF控制器(SDCARD等)所支持的外部存储器。

Memory Port1(DRAM):

片选引脚Xm1CSn[1:0],256M×2Banks。

支持mobile DDR、DDR、Mobile SDRAM和SDRAM,下文中的DARM即指此四种(相对于SRAM)

1.2 存储系统内存映射

S3C6410内存映射表如下所示:

S3C6410内存映射表

02_memory_map.png (39.44 KB, 下载次数: 0)

2020-5-2 15:55 上传

S3C6410X支持32位(4G)物理地址,但实际只用了2G存储空间,地址空间范围为0x0000_0000至0x7FFF_FFFF。

此地址空间分为两部分:前1.75G用于存储器(内部存储器和外部存储器),后0.25G(256M)用于外设。

1.2.1 存储器地址范围

地址范围:0x0000_0000-0x6FFF_FFFF(1.75G),通过SPINE总线访问。

存储器空间分为四个区域,如下:

1) 启动镜像区(boot image area)

地址范围:0x0000_0000-0x07FF_FFFF(128M)

启动镜像区并没有实际的映射内存(mapped-memory)。启动镜像区反映一个镜像,这个镜像指向内部存储区的SteppingStone或静态存储区。启动镜像的地址固定为0x0000_0000。

程序启动从地址0x0000_0000开始,所谓映射,实际上就是跳到。如启动镜像区映射到NOR即程序执行时从0地址直接跳转到NOR中执行。

2) 内部存储区(internal memory area)

地址范围:0x0800_0000-0x0FFF_FFFF(128M, 64M×2)

包含内部ROM(Internal ROM, IROM)和内部SRAM(Internal SRAM, 亦称SteppingStone)。内部存储区供bootloader访问。每块内部存储区的起始地址固定:

内部ROM地址范围0x0800_0000-0x0BFF_FFFF(64M),但实际存储仅32K。只读,当内部ROM启动被选中时该区域将映射到启动镜像区。

内部SRAM地址范围0xC000_0000-0x0FFF_FFFF(64M),但实际存储仅4K。可读写,当NAND闪存启动被选中时该区域能映射到启动镜像区。

3) 静态存储区(static memory area)

地址范围:0x1000_0000-0x3FFF_FFFF(768M, 128M×6)

此地址空间支持SROM控制器(支持SRAM、ROM、NOR)、OneNAND控制器(支持OneNAND)所支持的存储设备,还有SteppingStone(特殊,后面有描述)。也就是说NOR、OneNAND等可被编址到本空间,可通过地址访问。

此地址空间不支持NAND控制器和CF控制器。当NAND和CF的片选连接到Xm[0]CSn[5:2]的某一片选时,此片选对应的bank是没有用处的。不可以通过静态存储区的地址空间访问NAND的和CF,而是通过访问其控制器的SFR间接访问NAND和CF。有一个例外:若Xm[0]CSn[2]被用于片选NAND Flash,则Stepping Stone将映射到存取区0x2000_0000-0x27FF_FFFF,因NAND控制器有DMA功能,主要用于启动时的代码搬运,详细描述在本文的最后。

4) 动态存储区(dynamic memory area)

地址范围:0x4000_0000-0x6FFF_FFFF(768M)

0x4000_0000-0x4FFF_FFFF(256M, 128M×2)的地址空间保留。

0x5000_0000-0x6FFF_FFFF(512M, 256M×2)的地址空间用于DMC1(DRAM Controller of the Memory Port1),每一片选的起始地址可配置。

1.2.2 外设地址范围

地址范围:0x0000 0000-0x6FFF FFFF(256M),通过PERI总线访问。

此地址空间可访问所有的SFR。同样,若数据需从NFCON 或CFCON 传输,那么它们将通过PERI 总线传输。

2. 启动方式

S3C6410设备启动模式如下表所示:

S3C6410启动模式表

S3C6410支持Nand/Nor/OneNAND/Modem/iROM(内部ROM)几种启动方式,与启动模式相关的硬件管脚有:

03_booting_mode.png (64.69 KB, 下载次数: 0)

2020-5-2 15:55 上传

XOM[4:0]:

XOM[4:1]选择启动设备Nand/Nor/OneNAND/Modem/iROM。

XOM[0]选择时钟源,为0选择XXTlpll,为1选择XEXTCLK。

GPN[15:13]:

用于识别iROM启动方式时的设备类型。

XSELNAND:

选择使用Nand设备或者OneNand设备(无论是用作启动设备还是存储设备)。为0使用OneNand,为1使用Nand,当NAND和OneNAND均未使用时,为0或1皆可。

启动模式分为两类:

2.1 iROM启动方式

iROM启动模式:启动镜像区映射到iROM

当OM[4:1]=1111时为iROM启动方式,芯片上电后,首先从iROM中运行。

BL0:Bootloader0,即固化在iROM中的启动代码,直接在iROM中运行。负责部分初始化工作以及将BL1拷贝至SteppingStone。

BL1:Bootloader1,存储于启动设备中(由GPN[15:13]管脚指定,如SD卡、NAND等),运行于iRAM中(即Internal SRAM, SteppingStone)。初始化DRAM等以及将BL2拷贝到DRAM。

BL2:Bootloader2,存储于启动设备中(由GPN[15:13]管脚指定,如SD卡、NAND等),运行于DRAM中,负责部分初始化工作以及引导操作系统等。

iROM启动方式如下图所示:

S3C6410 iROM启动模式示意图

04_iROM_booting_schematic.png (64.12 KB, 下载次数: 0)

2020-5-2 15:55 上传

① iROM supports initial boot up: initialize system clock, D-TCM, device specific controller and booting device.

② iROM boot codes can load 4KB of bootloader to stepping stone. The 8KB boot loader is called BL1.

③ BL1: BL1 can initialize system clock, UART, and SDRAM for user. After initializing, BL1 will load remaining boot loader which is called BL2 on the SDRAM.

④ Finally, jump to start address of BL2. That will make good environment to use system.

BL0将执行如下操作,详细流程参考图

禁用Watch-dog

初始化TCM

初始化设备拷贝函数,用于拷贝BL1到SteppingStone中

初始化栈区域

初始化PLL

初始化指令Cache

初始化堆区域

拷贝BL1到SteppingStone中

验证BL1

跳转到SteppingStone中运行

05_iROM_booting_flow.png (94.13 KB, 下载次数: 0)

2020-5-2 15:56 上传

S3C6410 iROM启动模式流程图

与启动相关的存储器映射如下表所示:

06_booting_regs_map.png (26.3 KB, 下载次数: 0)

2020-5-2 15:56 上传

S3C6410启动相关的存储器映射

2.2 非iROM启动方式

非iROM启动模式:启动镜像区映射到iRAM[NAND]、ExtROM、NOR或OneNAND

即使用Nand/Nor/OneNAND/Modem启动,以Nand为例:

当芯片上电后,Nand-Flash控制器会自动使用DMA将自己的bootloader区域的前4KB代码搬运到iRAM(内部SRAM),注意此动作由硬件执行,注意Nand-Flash控制器位于6410 IC内部,当然前提是芯片内部的Nand-Flash控制器支持Nand-Flash启动这个功能。

当然,若Nand-Flash中无bootloader程序,芯片肯定无法启动,DRAM也无法初始化。同样使用Nor启动也是一样。

非iROM启动方式与iROM启动方式不同的一点在于:非iROM启动方式是在芯片上电后,由Nand-Flash控制器(或Nor-Flash控制器等)将bootlader的相关部分搬运到SteppingStone中运行,而iROM启动方式是在芯片上电后,由iROM中的启动代码BL0将bootlader的相关部分搬运到SteppingStone中运行。如图2所示,即上电后第①步不同,其后步骤基本一样。

3. 总结分析

以下内容来自User Manual V1.10第6章和Application Note V1.0第6章

6410 SROM控制器支持SRAM, various ROMs和NOR flash。

SROM Controller support SROM interface for Bank0 to Bank5. In case of OneNAND boot, SROM controller cannot control Bank2 and Bank3 because its mastership is on OneNAND Controller. In case of NAND boot, SROM controller cannot control Bank2 and Bank3 because its mastership is on NAND Flash Controller.

S3C6410内存映射示意图

当AXI Remap=0时,是非IROM启动方式。

下面从各控制器说起:

SROM控制器:

支持SRAM,ROM,NOR flash。上图中的SRAM0-SRAM5即指SRAM,External ROM则指ROM和NOR flash。SROM控制器支持的存储设备,代码可在其中直接运行。

因此启动镜像区可直接映射到SRAM0、External ROM,启动代码直接在存储设备中运行。当然SRAM掉电丢失内容,无法作启动设备。

OneNAND控制器:

控制OneNAND flash,代码也可在OneNAND中运行。

因此启动镜像区可直接映射到OneNAND区,启动代码直接在OneNAND中运行。

NAND控制器:

控制NAND flash,代码不可在其中运行。

NAND启动时,上电时NAND控制器可自动将自己bootloder区的前4KB代码拷贝到即内部SRAM(SteppingStone),暂称之为DMA功能。

启动镜像区映射到内部SRAM(限上电直接从内部SRAM执行),内部SRAM中的代码是从NAND时拷贝过来的,因此前面也称SteppingStone映射到了NAND。

CF控制器:

控制CF/ATA card,代码不可在其中运行。

CF控制器不具备DMA功能,因此SDCARD只能使用IROM启动,无法使用非IROM启动方式。

SROM控制器支持的存储器、OneNAND存储器均可通过静态存储区(static memory area)直接存取,它们被编址在静态存储区。

而NAND和CF卡则不行,必须通过相应的控制器对器件间接访问,不能被编址在静态存储区,当它们使用Xm0CSn[5:2]占了静态存储区的相应banks时,相应的bank将不可用,白白被占。一个例外是:若Xm[0]CSn[2]被用于片选NAND Flash,则Stepping Stone将映射到存取区0x2000_0000-0x27FF_FFFF,这一句话还是不很清楚。

当AXI Remap=1时,是IROM启动方式。

启动镜像区映射到Internal ROM(BL0),BL0初始化相关硬件后,将位于外部存储器(SRAM因掉电丢失除外,NOR,ROM,NAND,CF)的bootloader的前4KB(BL1)拷至SteppingStone(即Internal RAM),并跳转至BL1运行,SteppingStone中的BL1初始化相关硬件后,将外存中剩余的bootloader(BL2)拷至DRAM中并跳转至DRAM中的BL2运行,BL2开始引导操作系统。

linux内存映射对开发版刷屏,TQ6410/OK6410裸机LCD刷屏程序借助UBOOT来执行相关推荐

  1. Linux 内存映射之文件映射

    Linux 内存映射之文件映射 文章目录 Linux 内存映射之文件映射 文件映射 匿名映射 文件的私有映射与共享映射 创建映射 mmap() 文件映射的边界情况 正常文件范围的内存映射 超出文件范围 ...

  2. 高级OS(八) - Linux内存映射

    高级OS(八) - Linux内存映射 一.题目 二.解答 1.进入Linux 内核(4.19)源代码, 给出task_struct 结构,mm_struct 结构和 vm_area_struct 结 ...

  3. S32K程序,基于S32k144官方开发版 包含大部分驱动,和UDS程序,UDS服务需要自己改

    S32K程序,基于S32k144官方开发版 包含大部分驱动,和UDS程序,UDS服务需要自己改 :731000661854305913时间煮雨_______

  4. linux应用对物理内存映射,深入理解Linux内存映射机制 (1)

    一. 绪 论 二. X86的硬件寻址方法 三. 内核对页表的设置 四. 实例分析映射机制 一. 绪 论 我们经常在程序的反汇编代码中看到一些类似0x32118965这样的地址,操作系统中称为线性地址, ...

  5. Linux内存映射基础概念

    什么是内存映射 内存映射(Memory Mapping)是Linux操作系统中一种重要的内存管理技术.它允许程序将一个文件或者其他对象映射到进程的虚拟地址空间中,从而使得程序可以像访问内存一样直接访问 ...

  6. Linux内存映射--mmap函数

    Linux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改, 先来看一下mmap的函数声明: 头文件: < ...

  7. [转载]linux内存映射mmap原理分析

    转自:http://blog.csdn.net/yusiguyuan/article/details/23388771 内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对 ...

  8. 深入理解Linux内存映射机制

    Author: wzt EMail: [email]wzt@xsec.org[/email] Site: [url]http://www.xsec.org[/url] Date: 2008-6-13 ...

  9. linux 内存映射-ioremap和mmap函数

    最近开始学习Linux驱动程序,将内存映射和ioremap,mmap函数相关资料进行了整理 一,内存映射  对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器 ...

  10. linux内存映射原理,Linux内存管理实践-使用fault()实现内存映射

    内核态与用户态进行数据交互通常是这样一种模型:内核利用自身的特权通过特定的服务程序采集.接收和处理数据:接着,用户态程序和内核服务程序进行数据交互,或接收内核态的数据,或向内核态写入数据.通过传统的那 ...

最新文章

  1. php base64解码图片 base64加密图片还原
  2. openStack调试
  3. 贝叶斯思想概述:从贝叶斯定理到贝叶斯网络
  4. 机器翻译:谷歌翻译是如何对几乎所有语言进行翻译的?
  5. pytorch可视化 resnet50特征图
  6. 几个大神程序猿更喜欢用的Python编辑器!
  7. JavaScript_process01
  8. mybatis配置properties属性
  9. ie6 z-index bug
  10. C++ setw和setfill
  11. 华三服务器收集系统日志,Rsyslog+H3C日志系统(示例代码)
  12. unity 查找所以物体_用Unity来实现一下绳子效果——Obi Rope插件介绍
  13. Proteus ISIS仿真软件中英文元件名称对照
  14. MDM平台UI升级功能说明
  15. 空间点到空间直线的垂点计算
  16. 常见路由器默认登录用户名和密码(大全)
  17. 海洋cms index.php被修改,海洋CMS(SEACMS)新版本V6.55补丁仍可被绕过执行任意代码...
  18. LR推导及其与SVM的区别
  19. springboot+vue社区维修平台(源码+文档)
  20. 大括号内打两行公式,还附带标号或条件

热门文章

  1. Cinnamon 任务栏网速绘制内存和CPU使用率竖线
  2. Bootstrap学习心得
  3. 域管理员与本地管理员密码破解
  4. python简易中文名转英文小程序
  5. 了解 HTTP 看这一篇就够
  6. DM 关键字、屏蔽关键字
  7. uniapp基础开发模板
  8. 给Matlab添加工具箱Toolbox的方法(有截图详细讲解)(R2019b)
  9. c语言中NULL到底是什么?
  10. 台式计算机运行慢怎么样能提高速度,电脑配置低怎么办 如何让电脑运行速度加快...