S5PV210裸机(一):裸机基础,arm指令,210启动刷机

news2024/11/27 9:44:22

本文主要探讨s5pv210裸机基础知识,arm指令,以及210启动刷机相关知识。

Soc与cpu
        Soc是cpu与其他外设的集合即SoC<==>cpu+DDR+flash+utral+......

地址总线与数据总线
        cpu通过地址总线寻址即传输DDR或flash等地址,通过数据总线与外设进行数据交换即传输DDR或flash等地址中的数据或被修改的数据
        地址总线的位数决定cpu的寻址范围即arm32位-—>2^32—->2^32/2^30=4G故寻址范围是4G,可支持最大内存是4G
        数据总线的位数决定cpu单次通信的交换的信息数量即arm32为单次可传输32位(int类型)
        CPU在固定频率运行,通过总线读取外部存储设备中的二进制指令集解码执行

编程及运行过程
        .c文件-->预编译-->.i文件-->编译-->.s文件-->汇编-->.o二进制文件(多个)-->链接-->elf可执行程序-->objcopy工具-->bin文件(可烧录到flash)-->总线-->cpu读入烧录的bin文件解码-->指令流水线-->cpu执行指令

cpu访问内存
        IO与内存统一编址方式:外设寄存器当作内存地址来读写操作外设,类似内存访问方式,编程简单,地址空间有限
        IO与内存独立编址:专用的CPU指令来访问外设,cpu设计复杂
存储
        ROM:外存,只读存储器,硬盘,Flash(Nand iNand···· U盘、SSD),光盘
        IROM:SOC内部ROM
        NorFlash:总线式相连,CPU上电后可直接读取,用作启动介质,接到SROM bank
        NandFlash:不能直接读取,需初始化后通过时序接口读写,eMMC/iNand/moviNand oneNAND SD卡/TF卡/MMC卡 eSSD

        RAM:内存,随机访问存储器
        IRAM:SOC内部RAM
        DRAM:动态RAM,使用前需要初始化
        SRAM:静态RAM,上电可使用,无需初始化

        注意:嵌入式系统的存储为外接的大容量Nand + 外接大容量DRAM + SoC内置SRAM

寄存器
        寄存器是CPU外设,程序操控硬件的接口且每个bit位有特定含义
        ARM有37个寄存器,每个寄存器长度为32位,通用寄存器(30),PC(1),CPSR(1),SPSR(5)

cpsr寄存器

3130292827...2423         87654        0
NZCVQ...JundefineIFTmodel

        条件位:
                N :指令运算结果值。1表示结果为负,0表示结果为正或零
                Z :1表示运算结果为0,0表示运算结果不为0(cmp指令)
                C :加法指令(cmn指令)结果产生进位C=1,其他C为0,减法指令(cmp指令),运算中发生借位C=0其他C=1,移位操作指令,C最后位的值,其他指令,C不变
                V:加减指令,运算结果为二进制带符号位的补码,1表示符号位溢出
                Q :ARM 5TE/J架构支持,指示饱和状态
                J :仅ARM 5TE/J架构支持1表示处理器处于Jazelle状
        中断位:
                I :1为IRQ.
                F :1为FIQ.
                T :仅ARM  xT架构支持0处于 ARM 状态,1处于Thumb状态
Mode位:处理器模式位(工作模式)

PC(r15)
        pc为程序指针,pc的指向为cpu操作的对象,模式跳转时,pc指向目标寄存器地址

lr(r14)
        保存子程序返回地址,异常发生时保存发生前的相应位置(lr = PC - 4)

sp(r13)
        堆栈寄存器,用于程序保存或恢复数据,用于子程序调用及中断响应时保护与恢复现场

cpu工作模式
        User:非特权模式,多数任务执行状态
        FIQ:优先级中断模式
        IRQ:低优先级中断模式
        Supervisor:复位和软中断模式
        Abort:读取写入异常模式
        Undef:指令异常种模式(未定义指令)
        System:特权模式
        注意:除user外其他都为特权模式,特权模式中除system外其余特权模式可手动切换(写cpsr)或cpu自发进行(一般)且不同模式下可访问的寄存器不同

中断异常
        异常向量表:存储异常处理方式的地址,异常发生时CPU(pc)自发跳转
        异常处理流程:产生异常-->拷贝CPSR到SPSR(具体的异常模式下的scpr,CPU自发进行)->设置 CPSR的运行模式(cpsr的model)->处理器进入ARM 态(设置cpsr下的T位为0,CPU自发进行)->改变处理器模式进入相应的异常模式->设置中断禁止位禁止相应中断(设置cpsr的中断位,cpu自发)->保存返回地址到 LR(lr = pc - 4)->设置PC指向异常向量处理异常位置->异常处理返回->拷贝SPSR到CPSR->pc指向lr中的位置(mov pc, lr)

arm汇编指令

        ldr:将内存内容加载入通用寄存器中
        str:将寄存器内容存入内存空间中
        寄存器寻址         mov r1, r2                    r1 = r2
        立即寻址           mov r0, #0xFF00               r2 = 0xFF00(合法立即数)
        寄存器移位寻址     mov r0, r1, lsl #3             r0 = r1<<3
        寄存器间接寻址     ldr r1, [r2]                   r1 = *r2(r2位内存地址)
        基址变址寻址       ldr r1, [r2, #4]               r1 = *(r2 + 4)
        多寄存器寻址       ldmia r1!, {r2-r7, r12}
        堆栈寻址           stmfd sp!, {r2-r7, lr}
        相对寻址           beq flag                       if(eq) {flag}
        按位取反传递        r1 = 0x000000ff;mvn r0, r1     r0 = 0xffffff00
        与                 and     
        或                 orr
        异或               eor
        位清除             bic  r0,r1,#0x1f                r1中bit0到bit4清零赋给r0    

        MOV与ldr
                MOV r1,r2                   r1 = r2;
                MOV r0,#0                   r0 = 0;
                mov r0,#0xFF00              r0 =0xFF00 
                ldr r0,=0                   r0 = 0
                ldr r0,r1                  r1寄存器中放入r0的值
                ldr r0, 0x12345678          r0 = 0x12345678
                ldr r2,[r0]                r2 = *r0;r0中存储的是地址
                LDR伪指令
                        ldr r0, =0x12345678 0x12345678地址写入r0
                        ldr  r0, =_start    将标号值赋给r0
                注意:mov指令限制立即数长度为8位(512),ldr伪指没有,ldr伪指令立即数没超8位,汇编过程中ldr转为mov

        比较指令(默认修改cpsr)
                cmp r0, r1  ==  sub r2, r0, r1 (r2 = r0 - r1)
                cmn r0, r1  ==  add r0, r1 (r0 = r0 + r1)
                tst r0, #0xf  判断r0的bit0~bit3是否全为0
                teq 是否相等,按位异

        指令后缀
                B(byte)8位
                H(half word)16位
                S(signed)有符号,影响CPSR标志位

        协处理器
                CP15协处理器和MMU、cache、TLB等处理有关,功能上和操作系统的虚拟地址映射、cache管理等有关   
                mrc   读取CP15寄存器
                mcr   写入CP15寄存器
                mcr   p15, <opcode_1>, <Rd>, <Crn>, <Crm>, {<opcode_2>}
                        opcode_1:cp15为0
                        Rd:普通寄存器
                        Crn:cp15寄存器,合法值是c0~c15
                        Crm:cp15的寄存器,一般为c0
                         opcode_2:省略或为0

        地址指令后缀
                ia(increase after)  先传输,再地址+4
                ib(increase before) 先地址+4,再传输
                da(decrease after)  先传输,再地址-4
                db(decrease before) 先地址-4,再传输
                fd(full decrease)   满递减堆栈
                ed(empty decrease)  空递减堆栈
                fa(full append)     满递增堆栈
                ea (empty append)     空递增堆栈

        !
                ldmia  r0, {r2 - r3}   r2-r3加载到r0执行,结束后r0值不变
                ldmia  r0!, {r2 - r3} 修改r0的值为r2-r3执行,结束后r0值为r3

        ^:目标寄存器有pc,会将spsr写入到cpsr(异常返回过程)
                ldmfd  sp!, {r0 - r6, pc}   7个寄存器使用
                ldmfd  sp!, {r0 - r6, pc}^  9个寄存器使用

        gnu伪指令
                @   注释
                :   标号
                .   指令的地址
                #   立即数
                nop   空操作
                .global _start                                         _start外部链接属性
                .section .text                                         段为代码段
                .ascii .byte .short .long .word .quad .float .string   定义数据
                .align 4                                               以2^4字节对齐
                .balignl 16 0xabcdefgh                                 以16字节对齐填充0xabcdefgh
                .equ                                                   类似于C中宏定义
                .end                                                   文件结束标识
                .include                                               头文件包含
                .arm / .code32                                         声明arm指令
                .thumb / .code16                                       声明thubm指令
                b .                                                    while(1);
                IRQ_STACK_START: .word  0x0badc0de                     unsigned int IRQ_STACK_START = 0x0badc0de;

        adr和ldr
                ldr加载地址在链接时确定,adr加载地址在运行时确定
                通过adr和ldr加载地址判断程序是否在链接指定地址运行
                编译时adr被sub或add替代,ldr被mov替代
                adr以PC为基地址,指令和运行地址有关,可以检测程序当前运行地址
                ldr加载地址和链接地址有关,由链接脚本决定

210启动过程
        210内置96KB SRAM(iRAM),64KB NorFlash(iROM)
CPU上电后从IROM读取代码(BL0)执行,代码做初始化(CPU时钟、关看门狗,初始化icache,初始化栈···)并且判断启动模式(SD2或Uart或USB),读取代码BL1,(16KB)到iSRAM运行代码初始化NandFlash,读BL2到IRAM运行代码初始化DRAM,将OS读到DRAM,启动OS
        注意:usb启动usb启动不需要16字节校验头,烧录起始地址为0xd0020010,sd卡启动需要校验,烧录起始地址为0xd0020000

210刷机

        linux和android擦除uboot

busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync

sync

        uboot擦除uboot:

movi write u-boot 0x30000000

        官方工具烧录uboot.bin,crt连接,重启进入uboot

        按默认分区

fdisk -c 0

        启动fastboot
  

      fastboot

        windows启动fastboot并安装驱动
        查看设备接入

fastboot devices

SMDKC110-01     fastboot

        烧录

fastboot flash bootloader uboot.bin
fastboot flash kernel zImage
fastboot flash system rootfs_qt4.ext3
fastboot reboot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1056047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法优选】双指针专题——贰

文章目录 &#x1f60e;前言&#x1f332;[快乐数](https://leetcode.cn/problems/happy-number/)&#x1f6a9;题目描述&#x1f6a9;题⽬分析&#xff1a;&#x1f6a9;算法思路&#xff1a;&#x1f6a9;代码实现&#xff1a; &#x1f38b;[盛水最多的容器](https://leetco…

第四十章 持久对象和SQL - Object IDs

文章目录 第四十章 持久对象和SQL - Object IDsObject IDsID是如何确定的访问 ID 第四十章 持久对象和SQL - Object IDs Object IDs 每个对象在其所属的每个范围内都有一个唯一的 ID。在大多数情况下&#xff0c;使用此 ID 来处理对象。此 ID 是类中 %Persistent 的以下常用方…

如何制作在线流程图?6款在线工具帮你轻松搞定

流程图&#xff0c;顾名思义 —— 用视觉化的方式来描述一种过程或流程。它可以应用于各种领域&#xff0c;从业务流程&#xff0c;算法&#xff0c;到计算机程序等。然而&#xff0c;在创建流程图时&#xff0c;可能会遇到许多问题或者困惑&#xff0c;如缺乏专业的设计技能&a…

锚框_的标定

一、查漏补缺、熟能生巧&#xff1a; 1.关于fix.axis.add_patch在原来图像的坐标系同添加 边框的函数的使用&#xff1a; 2.torch.arange( h , device)生成tensor的等差数组: 3.torch.T&#xff08;&#xff09;就是transpose转置操作的函数咯: 4.torch.repeat操作&#xff0c…

静态数码管显示+动态数码管显示——“51单片机”

各位CSDN的uu们好呀&#xff0c;今天小雅兰的内容还是51单片机的知识&#xff0c;是为静态数码管显示和动态数码管显示&#xff0c;下面&#xff0c;让我们进入51单片机的世界吧&#xff01;&#xff01;&#xff01; 静态数码管显示 动态数码管显示 源代码 静态数码管显示 …

网络运营推广过程中客户说需要资质

大家好&#xff0c;我是网络工程师成长日记实验室的郑老师&#xff0c;您现在正在查看的是网络工程师成长日记专栏&#xff0c;记录网络工程师日常生活的点点滴滴 一个同学跟我学网络运营&#xff0c;他说他现在也学我做弱电。然后他说他接到电话&#xff0c;对方都是问资质&am…

首发Orin N芯片,腾势追赶「智驾第一梯队」

张祥威 编辑 | 德新 英伟达最新一代芯片—— Orin N&#xff0c;腾势拿下 首发。 9月26日&#xff0c;腾势N7推出「高快智驾包」。官方描述中&#xff0c;这一选装将“基于新一代NIVIDIA DRIVE ORIN的 高性能平台”&#xff0c;可以实现高速NOA。 此前&#xff0c;腾势的…

Acwing 843. n-皇后问题

Acwing 843. n-皇后问题 知识点题目描述思路讲解代码展示 知识点 DFS剪枝 题目描述 思路讲解 代码展示 第一种搜索方式&#xff1a; #include <iostream>using namespace std;const int N 20;int n; char g[N][N]; bool col[N], dg[N * 2], udg[N * 2];void dfs(in…

常见开发、测试模型

开发模型瀑布模型螺旋模型增量、迭代敏捷开发模型 测试模型V模型W模型 开发模型 瀑布模型 瀑布模型的每一个阶段都只执行一次&#xff0c;是线性顺序进行的软件开发模式。 优点&#xff1a;每个阶段做什么&#xff1b;产生什么非常清晰&#xff1b; 缺点&#xff1a;风险往…

Python3数据科学包系列(三):数据分析实战

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 一: 数据分析与挖掘认知升维 我们知道在数据分析与数据挖掘中,数据…

15: 8种GPIO模式和其他资源

目录 一:GPIO 1:简历 2:模式 3:位结构 4:八种模式 A: 浮空/上拉/下拉输入 B:模拟输入 ----GPIO_Mode_AIN C: 开漏/推挽输出 D:复用开漏/推挽输出 E: 模式总结 二:其他资源 1:片上资源/外设 2:引脚定义表 一:GPIO 1:简历 GPIO&#xff08;General Purpose Input …

排序---P1012 [NOIP1998 提高组] 拼数

思路&#xff1a; 这道题的思路就是进行排序&#xff0c;但不同于以往是根据数的大小排序&#xff0c;这道题是根据最高位最大就放在越前面。那么要怎么解决最高位越大排得越前这个问题呢&#xff0c;我们就会想到用字符串比较大小&#xff0c;就可以解决&#xff0c;所以我们…

RESTFul风格接口如何设计

RESTFul风格设计规范 HTTP协议请求方式要求 REST 风格主张在项目设计、开发过程中&#xff0c;具体的操作符合HTTP协议定义的请求方式的语义。 操作请求方式查询操作GET保存操作POST删除操作DELETE更新操作PUT 需求分析 数据结构&#xff1a; User {id 唯一标识,name 用户名&a…

车牌超分辨率:License Plate Super-Resolution Using Diffusion Models

论文作者&#xff1a;Sawsan AlHalawani,Bilel Benjdira,Adel Ammar,Anis Koubaa,Anas M. Ali 作者单位&#xff1a;Prince Sultan University 论文链接&#xff1a;http://arxiv.org/abs/2309.12506v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;图像超分辨率技术…

MySQL进阶_1.数据类型约束

文章目录 第一章、名词解释第二章、数据类型2.1、数据类型简介2.2、数据类型对应属性2.3、整数类型2.4、浮点类型2.5、定点数类型2.6、日期和时间类型2.7、文本字符串类型2.7.1、CHAR和VARCHAR区别2.7.2、TEXT 2.8、小结和建议 第三章、约束3.1 约束的定义3.2 非空约束3.3 唯一…

浅谈OV SSL 证书的优势

随着网络威胁日益增多&#xff0c;保护网站和用户安全已成为每个企业和组织的重要任务。在众多SSL证书类型中&#xff0c;OV&#xff08;Organization Validation&#xff09;证书以其独特的优势备受关注。让我们深入探究OV证书的优势所在&#xff0c;为网站安全搭建坚实的防线…

内网安全学习

域 域在我的理解就是一个局域网&#xff0c;管理员为了便于操作域内主机&#xff0c;通常会有一个DC&#xff08;domain control&#xff09;&#xff0c;域控主机可以直接控制其他域内主机&#xff0c;相当于域内的管理员权限&#xff0c;内网渗透的终极目的即拿到域控的权限…

嵌入式学习笔记(41)实时时钟RTC

7.6.1何为实时时钟 (1)real time clock&#xff0c;真实时间&#xff0c;就是所谓的xx年x月x日x时x分x秒星期x (2)RTC是SoC中一个内部外设&#xff0c;RTC有自己独立的晶振提供RTC时钟源&#xff08;32.768KHz&#xff09;&#xff0c;内部有一些寄存器用来记录时间&#xff…

Acwing 842. 排列数字

Acwing 842. 排列数字 知识点题目描述思路讲解代码展示 知识点 DFS 题目描述 思路讲解 DFS重点是&#xff1a;顺序&#xff01;&#xff08;暴力的手法&#xff09;&#xff08;递归&#xff09; 用 path 数组保存排列&#xff0c;当排列的长度为 n 时&#xff0c;是一种方…

pandas读取文件的时候出现‘OSError: Initializing from file failed’

报错原因&#xff1a; pandas.read_csv() 报错 OSError: Initializing from file failed&#xff0c;一般由两种情况引起&#xff1a;一种是函数参数为路径而非文件名称&#xff0c;另一种是函数参数带有中文。 原代码&#xff1a; data pd.read_csv(csv文件.csv) data导入文…