ARM 嵌入式开发学习——从内核到外设

ARM 嵌入式开发学习笔记:从内核到外设

一、开发板介绍

1. IMX6ULL-Mini开发板概述

IMX6ULL-Mini开发板是由正点原子提供的嵌入式开发平台,搭载NXP生产的i.MX6ULL系统级芯片(SoC),具有高性能、低功耗和紧凑体积的特点。

2. 硬件组成

(1)核心板
  • 六层PCB设计

  • CPU :NXP i.MX 6ULL Cortex-A7单核处理器

    • 主频:528MHz(工业级)或 800MHz(商业级)

    • 封装:467引脚BGA

  • 内存:512MB DDR3L RAM,支持高速数据存取

  • 存储:8GB eMMC,支持多种启动模式(SD卡、NAND、eMMC)

  • 显示屏:支持4.3寸屏,800×480分辨率

(2)底板
  • 通过双列直插方式与核心板连接

  • LED模块

    • 红色LED:用户可控指示灯

    • 蓝色LED:电源指示灯

    • 510Ω限流电阻:防止电流过大,保护LED灯珠

3. 相关术语

  • Cortex-A7:ARM公司设计的处理器核心架构

  • i.MX6ULL:NXP公司生产的系统级芯片(SoC)

  • IMX6ULL-Mini:正点原子基于i.MX6ULL设计的开发板

二、开发环境搭建

1. 软件工具安装

(1)Visual Studio Code
  • 安装Arm Assembly插件,支持汇编语法高亮
(2)创建工程目录
复制代码
D:\IMX6ULL\led_asm
(3)创建启动文件
  • 文件名:start.S(注意大写S后缀,会进行预处理)

2. 为什么需要交叉编译?

场景 原因 比喻
Windows开发 电脑是x86架构 中国人写英文文章
ARM运行 开发板是ARM架构 美国人读英文文章
交叉编译 在x86上编译ARM程序 中国人用翻译器写英文文章

3. 工具链组件功能说明

(1)编译器(arm-linux-gnueabihf-gcc)
  • 作用:翻译官,把人类写的代码翻译成机器代码

  • 输入.c文件(C语言)或.S文件(汇编语言)

  • 输出.o文件(目标文件)

  • 比喻:把中文小说翻译成英文草稿

  • 作用:装订员,把所有章节装订成书

  • 作用:格式转换专家

  • 转换elfbin

  • 区别

    • ELF格式:包含地址、调试信息(像带目录的书)

    • BIN格式:纯二进制指令(像直接的文章内容)

  • 比喻:把带目录的书去掉封面目录,只留正文

  • 作用:逆向翻译官

  • 功能:把机器码翻译回汇编语言

  • 用途:调试、学习、分析

  • 比喻:把英文书翻译回中文,方便理解

  • 任务

    1. 收集所有.o文件

    2. 分配内存地址

    3. 解决"谁调用谁"的问题

  • 输出.elf文件(完整的书)

  • 比喻:把各章草稿装订成完整书籍

4. 交叉编译工具链安装

(1)工具链文件
  • 文件:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
(2)安装步骤
  1. 拷贝到 /usr/local/arm

  2. 解压:sudo tar -xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

  3. 删除压缩包:sudo rm gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

  4. 配置环境变量:

    复制代码
    export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/
  5. 重启虚拟机:reboot

  6. 验证安装:arm-linux-gnueabihf-gcc -v

三、ARM架构基础理论

1. ARM工作模式(简单理解)

模式 用途 比喻
系统模式 正常程序运行 正常办公状态
IRQ模式 处理中断 接电话状态
FIQ模式 处理快速中断 紧急呼叫状态
用户模式 用户程序运行 访客权限状态

2. 寄存器 - CPU的工作台

(1)通用寄存器
  • R0-R12:普通工作台,放临时数据

  • 比喻:桌子上的草稿纸

(2)特殊寄存器
  • R13(SP):栈指针,标记数据堆叠位置

  • R14(LR):链接寄存器,记住返回地址

  • R15(PC):程序计数器,记录执行到哪一行

  • 比喻

    • SP:书签,标记看到哪一页

    • LR:便签,标记要回到哪一页

    • PC:手指,指着当前读的哪一行

3. 内存地址空间

复制代码
0x80000000 - 0x9FFFFFFF:DDR内存(512MB)
   像:房间号80000000到9FFFFFFF的大房间

0x020C4000 - 0x020CFFFF:GPIO控制器
   像:专门控制灯的开关房间

4. GPIO控制原理

引脚控制的三个步骤:

第一步:设置引脚功能(我是谁?)

复制代码
问:这个引脚是干嘛的?
答:我是控制LED灯的引脚(不是串口,不是I2C)
配置:设置成GPIO功能

第二步:设置引脚方向(我能干什么?)

复制代码
问:这个引脚是输入还是输出?
答:输出(要控制LED亮灭)
配置:设置为输出模式

第三步:设置引脚状态(我现在要干什么?)

复制代码
问:输出高电平还是低电平?
答:高电平 → LED亮
    低电平 → LED灭
配置:设置对应电平

四、外设控制理论

1. 寄存器操作基本概念

(1)什么是寄存器?
  • 定义:CPU内部的小存储单元

  • 大小:通常32位(4字节)

  • 特点:每个位都有特定含义

(2)寄存器操作三板斧
复制代码
// 1. 读-改-写模式(最常用)
value = 读寄存器();
value = value | 0x01;  // 设置某位
写寄存器(value);

// 2. 直接赋值
写寄存器(0xFFFFFFFF);

// 3. 位清除
value = 读寄存器();
value = value & ~0x01;  // 清除某位
写寄存器(value);

2. IOMUXC(引脚复用控制器)

为什么要引脚复用?
  • 问题:芯片引脚有限,功能很多

  • 解决方案:一个引脚多种功能,需要时切换

  • 比喻:多功能厅,可以开会、吃饭、跳舞

配置方法:
复制代码
设置IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的[3:0]位
0001:GPIO功能
0101:另一个功能
1001:又一个功能

3. 延时函数原理

软件延时
复制代码
for(int i=0; i<1000000; i++) {
    // 空循环,消耗时间
}
延时精度问题
  • 影响因素

    1. CPU主频

    2. 编译器优化

    3. 内存速度

  • 改进:使用硬件定时器


五、开发流程理论总结

1. 完整开发流程

复制代码
写代码 → 交叉编译 → 生成二进制 → 烧录 → 上电运行
    ↑          ↑         ↑         ↑         ↑
   编辑器    编译器    转换器    烧录器    开发板

2. 地址空间映射

地址范围 内容 加载时机
0x80000000 DDR起始 上电后
0x87800000 程序加载地址 链接时指定
0x020C4000 GPIO寄存器 硬件固定

3. 启动方式选择原理

BOOT模式拨码开关
复制代码
拨码开关 → 选择启动介质 → CPU从该介质加载程序
   ↓            ↓              ↓
物理开关     SD卡/eMMC     读取第一个程序

4. 调试理论

常用调试方法:
  1. LED调试法:用LED灯显示状态

  2. 串口打印法:通过串口输出信息

  3. 仿真器调试:硬件单步执行

问题诊断流程:
复制代码
现象 → 假设 → 验证 → 结论
LED不亮 → 程序没运行 → 检查SD卡 → 启动方式错误

六、重要概念对照表

新手理解 专业术语 实际含义
大脑 CPU 中央处理器
短期记忆 RAM 随机存取存储器
长期记忆 eMMC 嵌入式多媒体卡
开关 GPIO 通用输入输出
多功能厅 IOMUXC 输入输出复用控制器
翻译官 编译器 代码转换工具
装订员 链接器 目标文件合并工具
房间号 内存地址 存储位置标识
相关推荐
__万波__2 小时前
STM32L475跑马灯实验
stm32·单片机·嵌入式硬件
码农客栈2 小时前
小程序学习(十二)之命令行创建uni-app项目
学习·小程序·uni-app
爱问问题的小李2 小时前
学习面试题
学习
xiaobobo33302 小时前
STM32学习HAL库的一些知识点积累
stm32·学习·硬件软件一盘棋·寄存器操作·寄存器功能搜索
薛不痒2 小时前
计算机视觉opencv之图片旋转&模版匹配&银行卡号的识别
人工智能·opencv·学习·计算机视觉
江苏世纪龙科技2 小时前
当虚拟实训照进课堂:新能源汽车教学而生的动力总成拆装与检测软件
学习
EkihzniY2 小时前
护照阅读器:爱达魔都号邮轮的高效登船助力
嵌入式硬件
Century_Dragon2 小时前
赛教融合新体验:新能源汽车动力总成虚拟仿真实训系统
学习
hkNaruto2 小时前
【AI】AI学习笔记:什么是ReAct模式 ReAct模式详解:让AI学会思考与行动
人工智能·笔记·学习