书籍详情
嵌入式Linux与物联网软件开发:ARM处理器开发自学教程
作者:朱有鹏 韩霆
出版社:人民邮电出版社
出版时间:2023-12-01
ISBN:9787115617088
定价:¥89.80
购买这本书可以去
内容简介
本书基于ARM Cortex-A8 内核的三星 S5PV210 CPU,主要讲解 ARM CPU 开发的全套相关技术,包括ARM体系的背景知识、常规开发方式、ARM 体系结构和汇编指令集。本书还基于 X210 开发板讲解了开发板的原理图、芯片的数据手册,以及开发板的刷机流程等,讲解了 GPIO、LED、DDR、串口、定时器、看门狗、SD 卡、NAND Flash、iNAND、I2C 总线、LCD 屏、A/D 转换器、电阻式和电容式触摸屏等 ARM CPU 常见外设的原理,并使用汇编和 C 语言编程进行了外设及代码重定位、时钟体系等的原理和功能的编程实践。本书最后还利用X210 平台结合部分外设写了一个裸机串口的 Shell 作为小项目,帮助读者理解什么是交互式 Shell,为下一阶段U-Boot 及 Linux 内核的学习打好基础。在具体讲解过程中,本书引用了产品的一部分原始英文图表,并有针对性地进行了适当的说明。本书适合从事 CPU 开发等相关工作的人员和相关专业的学生阅读参考。
作者简介
朱有鹏,先后从事电子工程师、单片机软件工程师、嵌入式Linux软件工程师、物联网软件工程师、架构师等工作,“朱老师物联网大讲堂”创始人。擅长U-Boot、Linux内核等嵌入式底层和系统层开发、架构设计。擅长汇编、C/C、Java、C#等常用开发语言,2015年起录制的在线视频课程“朱有鹏老师嵌入式Linux核心课程”累计学习人数超300万。
目录
ARM那些你需要知道的事 01
1.1 ARM公司大事记 01
1.2 ARM公司的商业模式和生态系统 02
1.3 ARM处理器版本命名解析 03
1.3.1 如何描述ARM处理器的版本号 03
1.3.2 ARM处理器版本的发展历程 04
1.4 CPU和SoC的区别及外围设备的概念 05
1.4.1 CPU和SoC的区别 05
1.4.2 外围设备 06
1.5 学习平台的选择 06
1.5.1 学习平台的选择要求 06
1.5.2 为什么选择三星S5PV210 06
1.6 X210开发板介绍 07
1.7 基于单片机的嵌入式系统和基于复杂操作系统的
嵌入式系统的区别 07
1.7.1 芯片平台对比 08
1.7.2 片上资源、价格、应用领域上的对比 08
1.7.3 开发模式对比 08
1.7.4 技术特征对比 08
1.7.5 职业发展对比 09
1.8 嵌入式开发学习和编程语言、英语水平等的
关系 09
1.8.1 嵌入式开发学习和编程语言的关系 09
1.8.2 嵌入式开发学习和英语水平的关系 09
1.8.3 嵌入式开发学习和数电、模电的关系 09
1.8.4 嵌入式开发学习和专业的关系 09
1.8.5 嵌入式开发学习和个人性格的关系 10
1.9 嵌入式系统的构成、特点和发展方向 10
1.9.1 嵌入式系统的构成 10
1.9.2 嵌入式系统的特点 10
1.9.3 嵌入式系统的发展方向 11
1.10 交叉编译 12
1.10.1 软件开发的两种模式 12
1.10.2 交叉编译的特点 12
1.11 CPU的设计原理、地址总线/数据总线/控制
总线 13
1.11.1 CPU的设计原理 13
1.11.2 地址总线、数据总线和控制总线 13
1.12 嵌入式辅助开发工具 14
1.13 习题 14
ARM CPU的体系结构与汇编指令 15
2.1 可编程器件的编程原理 15
2.2 指令集对CPU的意义 16
2.3 CISC和RISC 16
2.4 统一编址和独立编址、冯·诺依曼结构和哈佛
结构 17
2.4.1 I/O与内存的统一编址和独立编址 17
2.4.2 冯·诺依曼结构和哈佛结构 18
2.5 软件编程控制硬件的关键——寄存器 19
2.5.1 寄存器的含义及查看方法 19
2.5.2 寄存器的分类 21
2.6 S5PV210的地址映射详解 21
2.7 CPU的外存储器和接口方式 24
2.7.1 SoC外存储器分类与介绍 25
2.7.2 S5PV210支持的外存储器 26
2.8 S5PV210的启动过程详解 27
2.8.1 不同计算机系统内存和外存配置的区别 27
2.8.2 S5PV210启动方式详解 28
2.8.3 X210开发板启动方式选择 30
2.9 ARM CPU的编程模式和7种工作模式 32
2.9.1 ARM CPU的编程模式 32
2.9.2 ARM CPU的7种工作模式 33
2.10 ARM CPU的37个寄存器详解 34
2.11 ARM CPU的异常处理方式简介 37
2.12 ARM汇编指令集详解 38
2.12.1 ARM汇编指令集总述 38
2.12.2 ARM汇编指令集中指令的分类及详细讲解 40
2.12.3 ARM汇编指令中的伪指令 46
2.13 习题 48
开发板、原理图和数据手册 49
3.1 开发板配置简介 49
3.2 资料导读 50
3.2.1 开发板硬件手册导读 50
3.2.2 X210核心板、底板原理图导读 51
3.2.3 S5PV210数据手册 55
3.3 开发板刷系统 56
3.3.1 刷机工具简介 56
3.3.2 开发板刷系统方法介绍 58
3.4 新开发板X210BV3S 65
3.5 习题 66
GPIO和LED 67
4.1 交叉编译工具链 67
4.2 Makefile 70
4.3 mkv210_image.c 73
4.3.1 mkv210_image.c的作用 73
4.3.2 mkv210_image.c代码解析 74
4.4 编写点亮LED程序前的相关准备工作 77
4.5 点亮LED 81
4.6 扩展:反汇编工具objdump 87
4.7 习题 89
SDRAM和重定位 90
5.1 关闭看门狗 90
5.2 设置栈和调用C程序 92
5.3 用汇编语言编写启动代码之开/关iCache 95
5.4 重定位引入与编程实现 96
5.4.1 重定位引入和链接脚本 96
5.4.2 重定位代码实现 99
5.5 SDRAM初始化 102
5.5.1 原理图中SDRAM相关部分分析 103
5.5.2 数据手册中SDRAM相关部分分析 104
5.5.3 代码实战 111
5.6 习题 117
时钟系统 118
6.1 SoC时钟系统简介 118
6.2 S5PV210的时钟系统 119
6.3 时钟设置的关键寄存器分析 126
6.4 实现时钟设置代码详解 126
6.4.1 S5PV210时钟设置的步骤分析 126
6.4.2 S5PV210时钟设置汇编语言代码分析 127
6.4.3 S5PV210时钟设置C语言代码分析 132
6.5 习题 134
串口通信 135
7.1 通信发展史及电子通信涉及的基础概念 135
7.1.1 通信发展史 135
7.1.2 电子通信中涉及的概念 136
7.2 串口通信的基本概念 138
7.3 串口通信的基本原理 140
7.4 S5PV210串口通信详解 142
7.4.1 原理框图与自动流控 142
7.4.2 3种扩展模式 144
7.4.3 串口通信中的中断与时钟 145
7.5 S5PV210串口通信编程实战 146
7.6 uart stdio的移植介绍 156
7.7 习题 164
按键和CPU中断系统 165
8.1 按键 165
8.2 S5PV210的中断体系介绍 167
8.3 异常向量表的编程处理 168
8.3.1 访问异常向量表 169
8.3.2 中断处理过程中汇编代码的使用 169
8.4 S5PV210中断处理的主要寄存器 170
8.5 中断处理的代码实现步骤 172
8.6 按键与外部中断 175
8.6.1 外部中断寄存器配置 175
8.6.2 外部中断实现按键 175
8.7 习题 176
定时器、看门狗和实时时钟等 177
9.1 定时器 177
9.2 S5PV210中的PWM定时器介绍 178
9.2.1 S5PV210的PWM定时器原理图简介 179
9.2.2 预分频器与分频器 180
9.2.3 TCNT、TCNTB、TCON和TCNTO寄存器
功能介绍 181
9.2.4 自动重载和双缓冲 183
9.3 PWM波形介绍 183
9.3.1 什么是PWM 183
9.3.2 PWM波形的生成原理 184
9.3.3 输出电平翻转器 185
9.3.4 死区生成器 185
9.4 蜂鸣器和PWM定时器编程实战 186
9.4.1 蜂鸣器的工作原理 186
9.4.2 原理图和硬件信息 187
9.4.3 驱动蜂鸣器的PWM定时器代码编写 188
9.4.4 编写C语言主函数、子函数 190
9.4.5 修改Makefile 191
9.5 看门狗 192
9.5.1 什么是看门狗及看门狗的作用 193
9.5.2 S5PV210看门狗的结构原理图 193
9.5.3 看门狗的主要寄存器 193
9.6 看门狗的编程实战 194
9.6.1 看门狗产生中断信号功能代码编写 194
9.6.2 看门狗产生复位信号功能代码编写 198
9.7 实时时钟介绍 200
9.7.1 S5PV210实时时钟的结构框图 200
9.7.2 S5PV210 RTC的主要寄存器 201
9.7.3 BCD码介绍 201
9.8 RTC编程实战 201
9.8.1 编程注意事项 201
9.8.2 实战步骤详解 202
9.8.3 示例程序详解 204
9.9 习题 208
SD卡启动 209
10.1 SD卡的特点和背景知识 209
10.2 SD卡的编程接口 210
10.2.1 物理接口 210
10.2.2 SD协议与SPI协议 210
10.3 S5PV210的SD卡启动详解 211
10.3.1 SoC为何要支持SD卡启动 211
10.3.2 SD卡启动的难点在哪里 211
10.3.3 SD卡启动流程 212
10.3.4 SoC支持SD卡启动的秘密 212
10.3.5 扇区和块的概念 213
10.3.6 用函数指针方式调用device copy
function 213
10.4 S5PV210的SD卡启动实战 214
10.4.1 任务:大于16KB的.bin文件使用SD卡
启动 214
10.4.2 代码划分为两部分(BL1和BL2)编写 214
10.4.3 BL1中的重定位 216
10.4.4 BL2远跳转 217
10.5 区别于将代码分为两部分的另一种启动方式 217
10.5.1 代码分为两部分启动的缺陷 217
10.5.2 U-Boot的SD卡启动 218
10.5.3 分析U-Boot的SD卡启动细节 218
10.6 习题 218
外存芯片NAND Flash和iNAND 219
11.1 NAND Flash的型号和命名 219
11.1.1 NAND Flash的数据位 219
11.1.2 NAND Flash的功能框图 219
11.2 NAND Flash的单元组织:Block和Page 221
11.2.1 带内数据和带外数据 221
11.2.2 NAND Flash的地址时序和命令码 222
11.3 NAND Flash的坏块检查 222
11.3.1 NAND Flash的页写操作 223
11.3.2 NAND Flash的擦除和页读操作 224
11.4 SoC的NAND Flash控制器 224
11.5 NAND Flash操作代码解析 225
11.6 iNAND介绍 228
11.7 SD卡/iNAND硬件接口 228
11.7.1 SD卡命令相应的操作模式 229
11.7.2 SD卡体系结构、内部寄存器 229
11.8 SD/iNAND代码分析 230
11.8.1 Hsmmc.h头文件CMD×和ACMD×命令码
分析 230
11.8.2 Hsmmc.c文件分析 233
I2C通信 238
12.1 I2C通信介绍 238
12.2 I2C通信的时序 239
12.2.1 I2C的空闲态/忙态、起始位/结束位 239
12.2.2 I2C数据传输格式(数据位和ACK) 240
12.2.3 数据在总线上的传输协议 240
12.3 S5PV210的I2C控制器 241
12.4 X210开发板的板载重力传感器介绍 243
12.4.1 原理图 243
12.4.2 重力传感器简介 244
12.4.3 I2C从设备地址 244
12.4.4 I2C从设备的通信速率 245
12.5 I2C的通信流程 245
12.5.1 I2C的通信流程寄存器分析 245
12.5.2 重力传感器读/写寄存器流程分析 247
12.6 I2C通信代码分析 248
12.7 习题 250
A/D转换器 251
13.1 A/D转换器的引入 251
13.1.1 模拟量和数字量 251
13.1.2 什么是A/D转换器 252
13.1.3 有A/D转换器自然就有D/A转换器 252
13.2 A/D转换器的主要相关概念 252
13.2.1 量程 252
13.2.2 精度 252
13.2.3 转换速率 253
13.2.4 A/D转换器的工作时钟框图 253
13.2.5 A/D转换器的通道数 254
13.2.6 A/D转换器和电阻式触摸屏的关系 255
13.3 S5PV210的A/D转换控制器 255
13.4 硬件设计分析 258
13.5 软件设计 258
13.6 程序烧录与调试 260
13.7 习题 262
LCD屏 263
14.1 LCD简介 263
14.1.1 什么是LCD 263
14.1.2 LCD的显示原理和特点 263
14.1.3 LCD屏的种类 264
14.1.4 其他类型的显示屏 264
14.2 LCD设备的接口技术 265
14.2.1 LCD设备通信接口中的电平转换 265
14.2.2 RGB接口详解 266
14.3 LCD的显像原理和相关概念 267
14.3.1 像素及相关概念 267
14.3.2 扫描 268
14.3.3 驱动器和控制器 269
14.3.4 显示内存(显存) 269
14.3.5 LCD屏的6个主要时序参数 270
14.4 颜色在计算机中的表示 272
14.4.1 计算机中的颜色是离散的 272
14.4.2 常见像素深度 272
14.5 S5PV210的LCD控制器 273
14.5.1 虚拟屏幕叠加 274
14.5.2 虚拟显示 275
14.6 LCD编程实战 276
14.6.1 LCD控制器初始化 276
14.6.2 显示像素、刷背景、横线竖线和画圆功能的
实现 287
14.6.3 写英文和中文字符 290
14.6.4 画图 292
14.7 习题 295
触摸屏 296
15.1 输入设备简介及触摸屏介绍 296
15.1.1 触摸屏的特点 296
15.1.2 触摸屏和显示屏的联系与区别 296
15.2 电阻式触摸屏的原理 297
15.3 S5PV210的电阻式触摸屏控制器 298
15.3.1 控制器框图介绍 298
15.3.2 控制器部件的工作模式选择 299
15.3.3 控制器的主要寄存器 300
15.4 电容式触摸屏的原理 301
15.4.1 人体感知电流 301
15.4.2 专用电路计算坐标 301
15.4.3 多个区块支持多点触摸 302
15.4.4 对外提供I2C的访问接口 302
15.5 FT5x06电容触摸IC简介 302
15.6 习题 303
Shell原理和问答机制引入 304
16.1 理解Shell 304
16.1.1 什么是Shell 304
16.1.2 Shell的运行原理 305
16.1.3 Shell应用举例 305
16.2 从零写最简单的Shell 306
16.2.1 使用printf和scanf函数做输入回显 306
16.2.2 定义简单命令集 306
16.3 将简易Shell移植到开发板中 308
16.3.1 工程选定、文件复制、Makefile编写 308
16.3.2 printf和scanf函数的移植 314
16.3.3 main.c和其余文件 317
16.3.4 编译下载和调试验证 319
16.4 定义标准命令集及解析 320
16.4.1 添加cmd_parser和cmd_exec函数 321
16.4.2 自己动手写strcmp和strcpy函数 322
16.4.3 定义命令集、添加shell.h头文件 322
16.4.4 修改代码 323
16.4.5 烧录与测试 324
16.5 添加第 一个命令 326
16.5.1 命令任务分析 326
16.5.2 命令解析与命令执行 327
16.5.3 修改代码 330
16.5.4 第 一个命令的测试 331
16.6 添加其他命令 332
16.6.1 添加pwm.c文件 332
16.6.2 添加adc.c命令文件 333
16.6.3 移植printf函数 334
16.6.4 添加lcd.c文件 335
16.6.5 修改代码 339
16.6.6 编译测试 345
16.7 实现开机倒计时自动执行命令 346
16.7.1 添加计时功能 347
16.7.2 修改代码 349
16.7.3 测试运行 352
16.7.4 构建BL1和BL2烧录 352
16.8 初步实现环境变量 354
16.8.1 添加env.c文件对环境变量进行设置、
修改 355
16.8.2 修改代码 357
16.8.3 测试代码 363
16.9 习题 364
1.1 ARM公司大事记 01
1.2 ARM公司的商业模式和生态系统 02
1.3 ARM处理器版本命名解析 03
1.3.1 如何描述ARM处理器的版本号 03
1.3.2 ARM处理器版本的发展历程 04
1.4 CPU和SoC的区别及外围设备的概念 05
1.4.1 CPU和SoC的区别 05
1.4.2 外围设备 06
1.5 学习平台的选择 06
1.5.1 学习平台的选择要求 06
1.5.2 为什么选择三星S5PV210 06
1.6 X210开发板介绍 07
1.7 基于单片机的嵌入式系统和基于复杂操作系统的
嵌入式系统的区别 07
1.7.1 芯片平台对比 08
1.7.2 片上资源、价格、应用领域上的对比 08
1.7.3 开发模式对比 08
1.7.4 技术特征对比 08
1.7.5 职业发展对比 09
1.8 嵌入式开发学习和编程语言、英语水平等的
关系 09
1.8.1 嵌入式开发学习和编程语言的关系 09
1.8.2 嵌入式开发学习和英语水平的关系 09
1.8.3 嵌入式开发学习和数电、模电的关系 09
1.8.4 嵌入式开发学习和专业的关系 09
1.8.5 嵌入式开发学习和个人性格的关系 10
1.9 嵌入式系统的构成、特点和发展方向 10
1.9.1 嵌入式系统的构成 10
1.9.2 嵌入式系统的特点 10
1.9.3 嵌入式系统的发展方向 11
1.10 交叉编译 12
1.10.1 软件开发的两种模式 12
1.10.2 交叉编译的特点 12
1.11 CPU的设计原理、地址总线/数据总线/控制
总线 13
1.11.1 CPU的设计原理 13
1.11.2 地址总线、数据总线和控制总线 13
1.12 嵌入式辅助开发工具 14
1.13 习题 14
ARM CPU的体系结构与汇编指令 15
2.1 可编程器件的编程原理 15
2.2 指令集对CPU的意义 16
2.3 CISC和RISC 16
2.4 统一编址和独立编址、冯·诺依曼结构和哈佛
结构 17
2.4.1 I/O与内存的统一编址和独立编址 17
2.4.2 冯·诺依曼结构和哈佛结构 18
2.5 软件编程控制硬件的关键——寄存器 19
2.5.1 寄存器的含义及查看方法 19
2.5.2 寄存器的分类 21
2.6 S5PV210的地址映射详解 21
2.7 CPU的外存储器和接口方式 24
2.7.1 SoC外存储器分类与介绍 25
2.7.2 S5PV210支持的外存储器 26
2.8 S5PV210的启动过程详解 27
2.8.1 不同计算机系统内存和外存配置的区别 27
2.8.2 S5PV210启动方式详解 28
2.8.3 X210开发板启动方式选择 30
2.9 ARM CPU的编程模式和7种工作模式 32
2.9.1 ARM CPU的编程模式 32
2.9.2 ARM CPU的7种工作模式 33
2.10 ARM CPU的37个寄存器详解 34
2.11 ARM CPU的异常处理方式简介 37
2.12 ARM汇编指令集详解 38
2.12.1 ARM汇编指令集总述 38
2.12.2 ARM汇编指令集中指令的分类及详细讲解 40
2.12.3 ARM汇编指令中的伪指令 46
2.13 习题 48
开发板、原理图和数据手册 49
3.1 开发板配置简介 49
3.2 资料导读 50
3.2.1 开发板硬件手册导读 50
3.2.2 X210核心板、底板原理图导读 51
3.2.3 S5PV210数据手册 55
3.3 开发板刷系统 56
3.3.1 刷机工具简介 56
3.3.2 开发板刷系统方法介绍 58
3.4 新开发板X210BV3S 65
3.5 习题 66
GPIO和LED 67
4.1 交叉编译工具链 67
4.2 Makefile 70
4.3 mkv210_image.c 73
4.3.1 mkv210_image.c的作用 73
4.3.2 mkv210_image.c代码解析 74
4.4 编写点亮LED程序前的相关准备工作 77
4.5 点亮LED 81
4.6 扩展:反汇编工具objdump 87
4.7 习题 89
SDRAM和重定位 90
5.1 关闭看门狗 90
5.2 设置栈和调用C程序 92
5.3 用汇编语言编写启动代码之开/关iCache 95
5.4 重定位引入与编程实现 96
5.4.1 重定位引入和链接脚本 96
5.4.2 重定位代码实现 99
5.5 SDRAM初始化 102
5.5.1 原理图中SDRAM相关部分分析 103
5.5.2 数据手册中SDRAM相关部分分析 104
5.5.3 代码实战 111
5.6 习题 117
时钟系统 118
6.1 SoC时钟系统简介 118
6.2 S5PV210的时钟系统 119
6.3 时钟设置的关键寄存器分析 126
6.4 实现时钟设置代码详解 126
6.4.1 S5PV210时钟设置的步骤分析 126
6.4.2 S5PV210时钟设置汇编语言代码分析 127
6.4.3 S5PV210时钟设置C语言代码分析 132
6.5 习题 134
串口通信 135
7.1 通信发展史及电子通信涉及的基础概念 135
7.1.1 通信发展史 135
7.1.2 电子通信中涉及的概念 136
7.2 串口通信的基本概念 138
7.3 串口通信的基本原理 140
7.4 S5PV210串口通信详解 142
7.4.1 原理框图与自动流控 142
7.4.2 3种扩展模式 144
7.4.3 串口通信中的中断与时钟 145
7.5 S5PV210串口通信编程实战 146
7.6 uart stdio的移植介绍 156
7.7 习题 164
按键和CPU中断系统 165
8.1 按键 165
8.2 S5PV210的中断体系介绍 167
8.3 异常向量表的编程处理 168
8.3.1 访问异常向量表 169
8.3.2 中断处理过程中汇编代码的使用 169
8.4 S5PV210中断处理的主要寄存器 170
8.5 中断处理的代码实现步骤 172
8.6 按键与外部中断 175
8.6.1 外部中断寄存器配置 175
8.6.2 外部中断实现按键 175
8.7 习题 176
定时器、看门狗和实时时钟等 177
9.1 定时器 177
9.2 S5PV210中的PWM定时器介绍 178
9.2.1 S5PV210的PWM定时器原理图简介 179
9.2.2 预分频器与分频器 180
9.2.3 TCNT、TCNTB、TCON和TCNTO寄存器
功能介绍 181
9.2.4 自动重载和双缓冲 183
9.3 PWM波形介绍 183
9.3.1 什么是PWM 183
9.3.2 PWM波形的生成原理 184
9.3.3 输出电平翻转器 185
9.3.4 死区生成器 185
9.4 蜂鸣器和PWM定时器编程实战 186
9.4.1 蜂鸣器的工作原理 186
9.4.2 原理图和硬件信息 187
9.4.3 驱动蜂鸣器的PWM定时器代码编写 188
9.4.4 编写C语言主函数、子函数 190
9.4.5 修改Makefile 191
9.5 看门狗 192
9.5.1 什么是看门狗及看门狗的作用 193
9.5.2 S5PV210看门狗的结构原理图 193
9.5.3 看门狗的主要寄存器 193
9.6 看门狗的编程实战 194
9.6.1 看门狗产生中断信号功能代码编写 194
9.6.2 看门狗产生复位信号功能代码编写 198
9.7 实时时钟介绍 200
9.7.1 S5PV210实时时钟的结构框图 200
9.7.2 S5PV210 RTC的主要寄存器 201
9.7.3 BCD码介绍 201
9.8 RTC编程实战 201
9.8.1 编程注意事项 201
9.8.2 实战步骤详解 202
9.8.3 示例程序详解 204
9.9 习题 208
SD卡启动 209
10.1 SD卡的特点和背景知识 209
10.2 SD卡的编程接口 210
10.2.1 物理接口 210
10.2.2 SD协议与SPI协议 210
10.3 S5PV210的SD卡启动详解 211
10.3.1 SoC为何要支持SD卡启动 211
10.3.2 SD卡启动的难点在哪里 211
10.3.3 SD卡启动流程 212
10.3.4 SoC支持SD卡启动的秘密 212
10.3.5 扇区和块的概念 213
10.3.6 用函数指针方式调用device copy
function 213
10.4 S5PV210的SD卡启动实战 214
10.4.1 任务:大于16KB的.bin文件使用SD卡
启动 214
10.4.2 代码划分为两部分(BL1和BL2)编写 214
10.4.3 BL1中的重定位 216
10.4.4 BL2远跳转 217
10.5 区别于将代码分为两部分的另一种启动方式 217
10.5.1 代码分为两部分启动的缺陷 217
10.5.2 U-Boot的SD卡启动 218
10.5.3 分析U-Boot的SD卡启动细节 218
10.6 习题 218
外存芯片NAND Flash和iNAND 219
11.1 NAND Flash的型号和命名 219
11.1.1 NAND Flash的数据位 219
11.1.2 NAND Flash的功能框图 219
11.2 NAND Flash的单元组织:Block和Page 221
11.2.1 带内数据和带外数据 221
11.2.2 NAND Flash的地址时序和命令码 222
11.3 NAND Flash的坏块检查 222
11.3.1 NAND Flash的页写操作 223
11.3.2 NAND Flash的擦除和页读操作 224
11.4 SoC的NAND Flash控制器 224
11.5 NAND Flash操作代码解析 225
11.6 iNAND介绍 228
11.7 SD卡/iNAND硬件接口 228
11.7.1 SD卡命令相应的操作模式 229
11.7.2 SD卡体系结构、内部寄存器 229
11.8 SD/iNAND代码分析 230
11.8.1 Hsmmc.h头文件CMD×和ACMD×命令码
分析 230
11.8.2 Hsmmc.c文件分析 233
I2C通信 238
12.1 I2C通信介绍 238
12.2 I2C通信的时序 239
12.2.1 I2C的空闲态/忙态、起始位/结束位 239
12.2.2 I2C数据传输格式(数据位和ACK) 240
12.2.3 数据在总线上的传输协议 240
12.3 S5PV210的I2C控制器 241
12.4 X210开发板的板载重力传感器介绍 243
12.4.1 原理图 243
12.4.2 重力传感器简介 244
12.4.3 I2C从设备地址 244
12.4.4 I2C从设备的通信速率 245
12.5 I2C的通信流程 245
12.5.1 I2C的通信流程寄存器分析 245
12.5.2 重力传感器读/写寄存器流程分析 247
12.6 I2C通信代码分析 248
12.7 习题 250
A/D转换器 251
13.1 A/D转换器的引入 251
13.1.1 模拟量和数字量 251
13.1.2 什么是A/D转换器 252
13.1.3 有A/D转换器自然就有D/A转换器 252
13.2 A/D转换器的主要相关概念 252
13.2.1 量程 252
13.2.2 精度 252
13.2.3 转换速率 253
13.2.4 A/D转换器的工作时钟框图 253
13.2.5 A/D转换器的通道数 254
13.2.6 A/D转换器和电阻式触摸屏的关系 255
13.3 S5PV210的A/D转换控制器 255
13.4 硬件设计分析 258
13.5 软件设计 258
13.6 程序烧录与调试 260
13.7 习题 262
LCD屏 263
14.1 LCD简介 263
14.1.1 什么是LCD 263
14.1.2 LCD的显示原理和特点 263
14.1.3 LCD屏的种类 264
14.1.4 其他类型的显示屏 264
14.2 LCD设备的接口技术 265
14.2.1 LCD设备通信接口中的电平转换 265
14.2.2 RGB接口详解 266
14.3 LCD的显像原理和相关概念 267
14.3.1 像素及相关概念 267
14.3.2 扫描 268
14.3.3 驱动器和控制器 269
14.3.4 显示内存(显存) 269
14.3.5 LCD屏的6个主要时序参数 270
14.4 颜色在计算机中的表示 272
14.4.1 计算机中的颜色是离散的 272
14.4.2 常见像素深度 272
14.5 S5PV210的LCD控制器 273
14.5.1 虚拟屏幕叠加 274
14.5.2 虚拟显示 275
14.6 LCD编程实战 276
14.6.1 LCD控制器初始化 276
14.6.2 显示像素、刷背景、横线竖线和画圆功能的
实现 287
14.6.3 写英文和中文字符 290
14.6.4 画图 292
14.7 习题 295
触摸屏 296
15.1 输入设备简介及触摸屏介绍 296
15.1.1 触摸屏的特点 296
15.1.2 触摸屏和显示屏的联系与区别 296
15.2 电阻式触摸屏的原理 297
15.3 S5PV210的电阻式触摸屏控制器 298
15.3.1 控制器框图介绍 298
15.3.2 控制器部件的工作模式选择 299
15.3.3 控制器的主要寄存器 300
15.4 电容式触摸屏的原理 301
15.4.1 人体感知电流 301
15.4.2 专用电路计算坐标 301
15.4.3 多个区块支持多点触摸 302
15.4.4 对外提供I2C的访问接口 302
15.5 FT5x06电容触摸IC简介 302
15.6 习题 303
Shell原理和问答机制引入 304
16.1 理解Shell 304
16.1.1 什么是Shell 304
16.1.2 Shell的运行原理 305
16.1.3 Shell应用举例 305
16.2 从零写最简单的Shell 306
16.2.1 使用printf和scanf函数做输入回显 306
16.2.2 定义简单命令集 306
16.3 将简易Shell移植到开发板中 308
16.3.1 工程选定、文件复制、Makefile编写 308
16.3.2 printf和scanf函数的移植 314
16.3.3 main.c和其余文件 317
16.3.4 编译下载和调试验证 319
16.4 定义标准命令集及解析 320
16.4.1 添加cmd_parser和cmd_exec函数 321
16.4.2 自己动手写strcmp和strcpy函数 322
16.4.3 定义命令集、添加shell.h头文件 322
16.4.4 修改代码 323
16.4.5 烧录与测试 324
16.5 添加第 一个命令 326
16.5.1 命令任务分析 326
16.5.2 命令解析与命令执行 327
16.5.3 修改代码 330
16.5.4 第 一个命令的测试 331
16.6 添加其他命令 332
16.6.1 添加pwm.c文件 332
16.6.2 添加adc.c命令文件 333
16.6.3 移植printf函数 334
16.6.4 添加lcd.c文件 335
16.6.5 修改代码 339
16.6.6 编译测试 345
16.7 实现开机倒计时自动执行命令 346
16.7.1 添加计时功能 347
16.7.2 修改代码 349
16.7.3 测试运行 352
16.7.4 构建BL1和BL2烧录 352
16.8 初步实现环境变量 354
16.8.1 添加env.c文件对环境变量进行设置、
修改 355
16.8.2 修改代码 357
16.8.3 测试代码 363
16.9 习题 364
猜您喜欢