LV01-01-AliOSThings-10-HAL层点灯-01-HAL层简介

本文主要是HAL层点灯——HAL层简介的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows版本 windows11
Ubuntu版本 Ubuntu22.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
点击查看本文参考资料
分类 网址 说明
官方网站 阿里云 阿里云官网主页
阿里生活物联平台 生活物联网平台(飞燕平台)主页
AliGenie 天猫精灵开放平台AliGenie主页
阿里物联网平台 阿里物联网平台主页
Bluetooth 技术网站 蓝牙协议规范什么的可以来这里找
Telink Telink | Chips for a Smarter IoT (telink-semi.com)
Telink中文官网
开发手册 AliOS Things开发指南 AliOS Things开发指南,这里是最新版本,可以直接从官网找到
AliOS Things开发指南 AliOS Things应用开发指南,这里应该是3.3版本的完整开发文档
AliOS Things开发指南(3.0) AliOS Things应用开发指南,这里应该是3.0版本的完整开发文档
生活物联网平台开发文档 生活物联网平台(飞燕平台)开发文档
《设备端开发指南》
Wi-Fi IoT品类定义与功能开发 天猫精灵IoT开放平台——Wi-Fi IoT品类定义与功能开发
硬件平台 mk3080 WiFi开发板 WiFi开发板使用指南-阿里云开发者社区
esp8266开发板 一个教程:ESP8266-NodeMCU开发板详解-太极创客 (taichi-maker.com)
TLSR8258 Datasheet Datasheet for Telink BLE + IEEE802.15.4 MultiStandard Wireless SoC TLSR8258
参考资料 AliOS Things 3.0 应用开发指南 这个只是一篇参考文章,里面是一些环境搭建相关的,可以参考
IP知识百科 - 华为 (huawei.com) IP的一些相关知识点
点击查看相关文件下载
分类 网址 说明
蓝牙规范相关文档 Core Specification 5.2 核心规格 5.2,该规范定义了创建可互操作的Bluetooth 设备所需的技术。
《Core_v5.2.pdf》
Mesh Model(v1.1) 本Bluetooth 规范定义了模型(以及它们所需的状态和消息),这些模型用于在mesh 网络中的节点上执行基本功能,超出了Bluetooth Mesh 配置文件 规范中定义的基础模型。
本规范包括定义跨设备类型标准功能的通用模型,以及支持关键mesh 场景的模型,如照明控制、传感器、时间和场景。
《MshMDL_v1.1.pdf》
Mesh Profile(v1.0.1) 该Bluetooth 规范定义了基本要求,以实现可互操作的mesh 网络解决方案,用于Bluetooth 低能量无线技术。
《MshPRFv1.0.1.pdf》
Mesh Device Properties 本规范包含Bluetooth Mesh 配置文件 和Bluetooth Mesh 模型规范所要求的设备属性的定义。
但是跟之前的有些区别,我主要看的之前的版本:《MMeshDeviceProperties_v1.2.pdf》
GATT Specification Supplement GATT Specification Supplement | Bluetooth® Technology Website。
好像可以在线看:《GATT Specification Supplement》
Assigned Numbers GATT的一些类型定义可以在这里找。
AliOS Things alios-things/AliOS-Things Gitee上的AliOSThings SDK源码仓库
alibaba/AliOS-Things GitHub上的AliOSThings SDK源码仓库
天猫精灵蓝牙Mesh协议栈 alibaba-archive/genie-bt-mesh-stack GitHub上的天猫精灵蓝牙Mesh协议栈源码仓库。
之前是在alibaba/genie-bt-mesh-stack这个仓库。
写笔记的时候最新提交为faf523618a6a2560090fc423222b9db80984bb7a
蓝牙Mesh设备开发指南 阿里云生活服务平台开发手册——蓝牙设备开发一节中的内容

一、HAL层位于哪里

1. STM32 HAL层

image-20200722160617444

2. linux HAL层

image-20200722160624733

3. android HAL层

image-20200722160649742

二、HAL层的作用

它主要有以下四点作用:

image-20200722160723946

三、HAL层GPIO应该有哪些接口

image-20200722160749947

四、如何使用Alios Things HAL-gpio

1. 查看SDK-demo

1
#AliOS-Things/application/example/hal_demo/halapp_gpio.c

2. 查看gpio头文件

1
#AliOS-Things/include/aos/hal/gpio.h

五、如何适配不同的硬件平台?

1. platform目录

与平台相关的主要是在AliOSThings源码目录中的platform目录下:

image-20231128173357472

2. platform/arch

我们可以看一下这个目录下都有什么:

image-20231128173729503

arch是Architecture的简写,翻译过来就是体系结构,不同的芯片使用的体系结构可能是不同的,体系结构的不同意味着它们使用的指令集是不同的。

2.1 mk3080 的arch

2.2.1 mk3080 arch查看

我们怎么知道mk3080使用的芯片是什么架构?一种方式就是去翻芯片手册,还有一种就是去工程源码目录找一个aos.mk,里面会有,我们进入之前创建的mk3080的工程源码目录,打开board/mk3080目录,会有以下文件:

image-20231128211518760

我们打开这个aos.mk文件:

image-20231128214819802

2.2.2 mk3080 arm架构代码

我们打开SDK源码目录的 platform/arch/arm 目录:

image-20231201191626339

这里分为不同版本的arm架构,这里就不详细说明了,这里不同的版本就是不同的体系架构,也使用不同的指令集。其中Cortex-M4是基于armv7指令集的,所以我们关注这个目录就可以了:

image-20231201191843264

我们打开这个aos.mk文件,看一下是如何兼容不同的内核的:

image-20231201192218706

这个port.S文件是干啥的?这个里面主要是芯片启动相关的汇编代码,和rhino打交道的代码都在这个文件里。

2.2 esp8266的arch

2.2.1 esp8266 arch查看

我们怎么知道esp8266使用的芯片是什么架构?一样的方式,一种方式就是去翻芯片手册,还有一种就是去工程源码目录找一个aos.mk,里面会有,我们进入之前创建的esp8266的工程源码目录,打开board/esp8266目录,会有以下文件:

image-20231201192545324

然后我们打开这个aos.mk文件看一下:

image-20231201192636346

图中的HOST_ARCH就表示esp8266的CPU使用的体系架构为xtensa,而下面的HOST_MCU_FAMILY表示使用的MCU平台为mcu_esp8266。

2.2.2 esp8266 xtensa查看

image-20200725192020383

3. platform/borad

3.1 esp8266

我们打开 AliOS-Things-SDK/platform/board/esp8266 目录:

image-20200725192255258

我们打开这个文件看一下:AliOS-Things-SDK/platform/board/esp8266/startup/startup.c:

image-20200725192457336

注意:esp8266 boot程序已经启动了 os了,在boot程序里,给用户提供一个接口,叫做user_init,我们启动代码只能在这里。

3.2 mk3080

我们打开 AliOS-Things-SDK/platform/board/mk3080 目录:

image-20231201193641899

我们打开 AliOS-Things-SDK/platform/board/mk3080/startup/startup.c:

image-20200725192716428

4. platform/mcu

我们一定有一个疑问:我们为什么调用同样的gpio_hal层接口,就可以适配不同的硬件平台?

4.1 mk3080 怎么适配的

通过在mcu子目录里,添加一个hal层适配代码:

image-20200725193357606

适配代码分析如下:

image-20200725193820974

注意:
(1)真正去编译的时候,根据.config文件,找到board里面的mcu平台,然后指定什么代码参与编译。

(2)我使用hal层,不但要动hal层的api接口,我们还需要懂不同硬件平台的hal层实现。

4.2 esp8266 怎么适配的

同样也是通过在mcu子目录里,添加一个hal层适配代码:

image-20200725193200682