一、背景
随着芯片价格飙升和交期延长,不断的寻找新的替代芯片成为重中之重。硬件抽象层在产品迭代和芯片更替中起到了重要的作用。
二、优势
硬件抽象层是介于应用程序和芯片驱动库之间,对芯片驱动进行抽象,对应用提供统一稳定的接口。单片机应用中,对硬件进行抽象是很有必要的。
1.使用硬件抽象层,进行单元测试变得更容易了。硬件抽象层之上的就是需要进行单元测试的模块,硬件抽象层之下的就是上板进行系统测试的重点。
2.使用硬件抽象层,同样的硬件电路开发不同的应用,同样的应用适配不同的硬件都变得更容易了。
3.因为降成本或者芯片缺货等原因进行芯片更换变得更高效和安全。在有单元测试保证应用程序可靠的情况下,只要适配一下新的芯片硬件就可以完成。
三、接口抽象
硬件抽象层,其实就是对硬件和芯片的功能进行抽象,提出常用的公共接口进行封装。GPIO作为最常用的硬件外设,需要先进行抽象,其抽象的接口需要被UART等外设使用。
进行硬件抽象时需要先忽略芯片,对GPIO的接口进行分类。GPIO的接口分为配置接口和控制接口。
配置接口包括输入/输出状态配置、外设功能配置。
输入状态配置需要配置输入上拉或下拉状态。
输出状态配置需要配置开漏输出(OD)或者推挽输出(PP)。
外设功能配置需要配置外设功能。
控制接口包括输出状态设置和输入状态获取。

四、适配
通过抽象这些接口,上层程序可以保持稳定,只需要根据不同的芯片进行适配,包括适配port定义、pin定义、上下拉、推挽/开漏输出等宏定义或枚举值。根据不同芯片GPIO的不同配置接口实现上述接口,GPIO的硬件抽象层就算完成了。

