嵌入式基本概念
MCU的学习
MCU使用的快速入门,使用官方库,比如说HAL库,以及曾经的STD库。这些官方库简单快速,并且在实际开发时,也是推荐使用库的。但是对于学习来说,HAL库封装了太多的技术细节,在使用库函数完成开发的时候,可不知道这些知识:重定位、代码段数据段BSS段、位置无关码、相对跳转绝对跳转、中断上下文、设置栈、ARM架构。了解了这些有助于在RTOS领域发展。
MCU的深入,可以基于寄存器来研究,抛开HAL库,从芯片手册开始,自己实现一切代码。但是工作中还是不要这样做。这些知识时后学学习RTOS和linux的u-boot必备知识。
linux驱动=面向对象编程思维+良好程序框架+硬件操作
各类处理器
intel的CPU从8086到80286、386,到现在的,越来越强大,对于个人电脑上的处理器现在叫CPU。
对于CPU来说,最起码需要搭配个RAM和Flash才能工作,打包在一起做成个芯片,叫成MCU。MCU的出现大大简化了电路的设计,比喻MSP430和STM32,这些芯片的性能并不见得比以前的微型计算机性能差。
在MCU上,RAM和flash比较小,kb量级,几百kb就了不起了。跑的裸机程序,比如一个while里面,有个专用的功能。
现在还有手机平板,这里面用MCU肯定是搞不定的,于是有了新的概念,应用处理器(Application Processor),可以认为应用处理器时MCU的升级版本,芯片内部有CPU有RAM可能也有小小的flash,但是不够用,可以外接非常大的RAM,比如2GB的DDR,32GB的Flash,这些芯片有更加强大的功能,比如DSP处理音频,有GPU用来执行图形运算,有LCD接口接屏幕。这些芯片更加强大,可以跑操作系统了,安装应用程序。
粗略地讲,除了电脑外的有计算能力的设备都是嵌入式。
嵌入式系统的硬件组成
一个东西里面有需要编程的芯片,就可以认为是嵌入式系统。
嵌入式系统支持从多种设备启动。比如说,支持SPI Flash、SD Card、USB Disk、Nor Flash启动,为了应对各种协议,有对应的控制器,如SPI Controller、SD Controller、USB Controller,这些设备并不是XIP设备,CPU没办法直接执行上面的程序的。
XIP的概念
XIP: eXecute In Place, 本地执行。可以不用将代码拷贝到内存,而直接在代码的存储空间运行。
XIP devices: Devices which are directly addressable by CPU系统上电,CPU一定要执行程序的,那么程序在哪里呢?
假设系统支持SPI Flash启动,但是他不是xip设备,CPU执行的第一条指令一定在xip设备里,这就是片内ROM,片内ROM帮助CPU读取SPI 上面的程序。这个程序会执行必要的初始化,比如设置时钟、设置内存; 再从"非XIP设备"中把程序读到内存;最后启动这上程序。
除了ROM,对于变量,需要RAM。随着程序越来越复杂,板上一般还要有非常大的DDR,对应的需要一个DDR Controller。
为了接上LCD显示屏,需要LCD Controller。
CPU发出的地址去到哪个Controller呢,因此需要一个memory controller,他把CPU发出的地址信号和数据信号发送到对应的Controller。
所有上面的东西做起来就是个SoC,System on Chip,这个芯片加上显示屏啥的,就是一个手机或者平板了。
引脚操作
一个引脚可以接了不止一个模块。
对于一个GPIO,里面有 IO_MUX,决定了引脚的信号来自内部哪一个外设。
外设为了省电,一般是关闭的,因此要先让其动起来,即Power/Clock control做一个ENABLE,
最后更新于