在本文中,我们将深入探讨DM365芯片的启动流程,特别是针对NAND和UART两种启动模式。
DM365是一款基于DaVinci技术的多媒体处理器,其启动机制涉及到多个组件,包括MMU、数据缓存和指令缓存,以及不同类型的BootLoader。
MMU(内存管理单元)在启动阶段必须关闭,这意味着在这个阶段,虚拟地址与物理地址是相同的,这简化了对内存的访问。
数据缓存和指令缓存则用于提高处理器对内存数据的存取速度,它们在启动过程中起到加速代码执行的作用。
DM365的启动模式可以通过设置BTSEL[2:0]跳线来选择。
当设置为001时,系统会从外部的NORFLASH启动;
其他设置则会从内部ROM启动,执行固化在ROM中的RBL(ROMBootLoader)。
RBL是一个不可擦除的BootLoader,负责加载用户定义的UBL(UserBootLoader)到内存特定地址执行。
UBL的大小有限,不能超过14K,因此无法直接包含完整的U-BOOT。
为了启动U-BOOT,我们需要一个小于14K的小型UBL,它位于NANDFlash的前5个block内。
启动流程如下:1.RBL运行,检查NANDFlash设备ID。
2.如果设备ID匹配,RBL查找UBL的描述信息。
3.RBL将UBL复制到ARM内部RAM,并进行ECC校验。
4.UBL加载后,可以进一步加载U-BOOT和操作系统。
对于NANDBOOT模式,RBL会尝试读取NANDFlash的设备ID,然后查找并加载UBL。
如果失败,会尝试其他启动模式,如MMC/SD。
对于UARTBOOT,RBL通过串口与主机程序交互,发送BOOTME信号并等待ACK,以完成UBL的传输。
在UARTBOOT过程中,串口设置和通信协议是关键,RBL与主机程序的交互确保了UBL的正确接收。
一旦UBL通过UART传输到DM365,后续的启动流程与NANDBOOT类似。
DM365的启动涉及多层BootLoader,每层都有特定的任务,从初始化硬件到加载操作系统。
理解这些启动机制对于开发和调试基于DM365的系统至关重要,尤其是在需要自定义启动流程或优化性能时。
同时,熟悉MMU、缓存的工作原理也是优化系统性能的关键。
2025/5/20 15:52:57 326KB
1
仿真操作系统实现LRU虚拟内存替换算法,已通过测试。
为了熟悉作业管理和虚页内存管理,了解作业及进程并发操作和虚页调度算法,并能够通过完成硬件结构的设计来实现进程并发、虚页调度、死锁检测等几大基本功能,我们选择了可视化仿真实现作业管理与虚页内存管理这一课题。
在学习相关知识之后,我们实现了裸机硬件的仿真、作业及进程调度的仿真、内存管理的仿真等功能,并通过可视化方式呈现。
裸机硬件的仿真包括CPU、内存Memory、硬盘Disk、时钟、中断和MMU地址变换部件等设计与实现。
其中CPU包含PC寄存器、PSW寄存器、IR寄存器等。
内存Memory大小为32KB,每个物理块大小512B,共64个物理块。
硬盘Disk大小为1MB,1个柱面中有32个磁道,1个磁道中有64个扇区,1个扇区为1个物理块,每个物理块的大小为512B。
MMU地址变换部件负责将逻辑地址转换为物理地址。
内存管理包括虚页内存的设计与实现、页表与快表的设计、内存替换算法等。
快表和页表的表项Page类,包含了页号、对应的块号和访问次数等信息。
快表FastTable和页表PageTable,实现了插入表项、判断是否命中、返回物理块号等功能。
LRU页面替换算法是在MMU地址变换部件中实现的,淘汰最近最长时间没有访问到的页面。
1
本人学习的国嵌笔记。
操作详细!第一季精通嵌入式 4一. 安装tftp服务器 4二. Samba服务器安装 4三. NFS服务器 5四. 安装vsftpdFTP服务器 5第2季-裸奔吧-ARM 6一. 安装交叉编译器 6二. 安装驱动 6三. 查看执行文件属性 6四. 编译工具用法 6五. Makefile基本规则 7六. 链接脚本 8七. Eclipse在线调试工具包为ARM-Tools.tar.gz 8八. ARM工作模式 10九. 寻址方式 10十. 汇编框架 10十一. Bootloader设计 111.2440板子 112.异常向量表 123.设置svc模式 124.时钟设置 125.sdram内存初始化 126.Steppingstone搬移代码到内存: 137.C语言环境初始化 13一、栈: 13栈作用: 14二、C语言和汇编混合编程 14第2季-裸奔吧-ARM\下学期 15一、MMU初始化 15二、中断 16三、NANDFALSH 17四、uart控制器 18五、MDA控制器 18六、液晶显示器 18七、触摸屏(采用TS中断) 18八、网卡驱动设计 19九、TFTP设计 19十、bootm设计 19第三季 20一、GDB调试使用方法 20二、coredump调试 20三、linux应用程序地址布局 21四、函数库使用方法 21五、系统调用之文件描述符 22六、库函数文件编程 22七、时间编程 22
2025/2/19 5:30:51 6.81MB 2014 国嵌笔记
1
关于ARM体系结构的MMU(内存管理单元)的详细描述,中译本,对英文不是很好的朋友很有帮助哦
2024/10/26 13:14:29 77KB mmu
1
(先打开一个程序在计算机中到底是如何运行的.html)2.虚拟内存到底是什么?为什么我们在C语言中看到的地址是假的?3.虚拟地址空间以及编译模式4.C语言内存对齐,提高寻址效率5.内存分页机制,完成虚拟地址的映射6.分页机制究竟是如何实现的?7.MMU部件以及对内存权限的控制8.Linux下C语言程序的内存布局(内存模型)9.Windows下C语言程序的内存布局(内存模型)10.用户模式和内核模式11.栈(Stack)是什么?栈溢出又是怎么回事?12.一个函数在栈上到底是怎样的?13.函数调用惯例(CallingConvention)
2024/4/24 22:23:15 4.94MB 内存管理 C语言
1
用ADS编译测试经由,内部中断按键测试法度圭表标准,能够经由uboot下载至NAND里运行,直接下载到SDRAM没法运行(由于不开启MMU)。
http://blog.csdn.net/forsakening/article/details/8998027这里是我对于S3C2440代码及中断的阐发。
2023/4/9 12:52:31 40KB TQ2440 外部中断
1
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡