Jelajahi Sumber

add ART-Pi environment

Jackistang 4 tahun lalu
induk
melakukan
d719942d0c

+ 69 - 1
README.md

@@ -1,2 +1,70 @@
-HM (HCI Middleware) 是一个蓝牙 HCI 层面的中间件,目标是实现一个通用的 HCI Transport 组件,能够灵活的适配不同的蓝牙卡片,并且可以对接不同的蓝牙协议栈。[项目文档](https://hci-middleware.readthedocs.io/zh_CN/latest/)。
+# HM
 
+## 介绍
+
+HM (HCI Middleware) 是一个蓝牙 HCI 传输层的中间件,目标是实现一个通用的 HCI Transport 组件,能够灵活的适配不同的蓝牙卡片,并且可以对接不同的蓝牙协议栈。详细内容可参考:[项目文档](https://hci-middleware.readthedocs.io/zh_CN/latest/)。
+
+目前支持的蓝牙芯片:
+
+- AP6212A (BCM)
+- CSR8311
+- Zephyr Controller
+
+目前支持的蓝牙协议栈:
+
+- BTStack
+- NimBLE
+
+### 目录结构
+
+| 名称    | 说明                              |
+| :------ | :-------------------------------- |
+| docs    | 文档目录                          |
+| include | 头文件目录                        |
+| src     | 源文件目录                        |
+| porting | 移植目录(蓝牙协议栈 + 蓝牙芯片) |
+| tests   | 测试目录                          |
+
+### 许可证
+
+HM package 遵循 Apache-2.0 License 许可,详见 `LICENSE` 文件。
+
+### 依赖
+
+- Serial 设备驱动框架
+
+## 如何打开 HM
+
+使用 HM package 需要在 RT-Thread 的包管理器中选择它,具体路径如下:
+
+```
+RT-Thread online packages
+	IoT packages --->
+		[*] HM
+```
+
+## 如何使用 HM
+
+HM 只是一个蓝牙 HCI Transport 层面的中间件,需要与蓝牙协议栈一起工作才能看到一个完整的效果,因此使用 HM 时还需要同时使用一款已经支持的蓝牙协议栈(BTStack, NimBLE),并且还需要选择需要使用的蓝牙芯片。
+
+下面以 ART-Pi 为例介绍如何使用 HM 组件。
+
+首先需要参考[文档教程]()搭建 ART-Pi 蓝牙开发的最小环境,然后选中并配置 HM 软件包:
+
+- 使用 **BTStack** 蓝牙协议栈
+- 使用 **AP6212A** 蓝牙芯片
+
+[此处应有图片]
+
+将 BTStack 软件包加入工程,并**配置 BTStack 内部使用 HM 组件**:
+
+[此处应有图片]
+
+## 注意事项
+
+无
+
+## 联系方式 & 感谢
+
+- 维护:Jackistang
+- 主页:https://github.com/Jackistang

+ 0 - 34
docs/ART-Pi.md

@@ -1,34 +0,0 @@
-
-
-本篇文章介绍了如何利用 RT-Thread Studio 搭建 ART-Pi 蓝牙开发的最小环境。
-
-ART-Pi 内部的蓝牙功能是通过 AP6212A 这个模组提供的,内部是 BCM 芯片。
-
-首先创建一个 **art_pi_blink_led** 的示例工程,ART-Pi 在出厂时就已经将 AP6212A 的蓝牙固件烧写进了外部 Flash 里,若没有则需要参考[教程]()手动烧写。
-
-![](images/image-20210908161727516.png)
-
-使能硬件 SPI1:
-
-![](images/image-20210908165123333.png)
-
-添加 SFUD 组件, FAL 组件,勾选 **FAL 使用 SFUD 驱动程序**:
-
-![](images/image-20210908140709058.png)
-
-打开串口 3,并在 `board.h ` 文件里添加 Uart 3 的引进:
-
-![](images/image-20210908170645234.png)
-
-```c
-#define BSP_USING_UART3
-#define BSP_UART3_TX_PIN       "PB10"
-#define BSP_UART3_RX_PIN       "PB11"
-```
-
-
-
-编译运行下载,能够看到下述输出:
-
-![](images/image-20210908162059277.png)
-

+ 67 - 0
docs/artpi_minimal_environment.md

@@ -0,0 +1,67 @@
+
+
+本篇文章介绍了如何利用 RT-Thread Studio 搭建 ART-Pi 蓝牙开发的最小环境。
+
+ART-Pi 内部的蓝牙功能是通过 AP6212A 这个模组提供的,内部是 BCM 芯片。
+
+首先创建一个基于 ART-Pi BSP 的**模板工程**,
+
+![](images/image-20210909153834893.png)
+
+最终需要在 `rtconfig.h` 里添加下述内容:
+
+```c
+#define RT_USING_MTD_NOR
+
+#define RT_USING_SFUD
+#define RT_SFUD_USING_SFDP
+#define RT_SFUD_USING_FLASH_INFO_TABLE
+#define RT_SFUD_SPI_MAX_HZ 50000000
+
+#define PKG_USING_FAL
+#define FAL_DEBUG_CONFIG
+#define FAL_DEBUG 1
+#define FAL_PART_HAS_TABLE_CFG
+#define FAL_USING_SFUD_PORT
+#define FAL_USING_NOR_FLASH_DEV_NAME "norflash0"
+#define PKG_USING_FAL_V00500
+#define PKG_FAL_VER_NUM 0x00500
+
+#define BSP_USING_UART3
+#define BSP_USING_SPI
+#define BSP_USING_SPI1
+```
+
+上述这些配置项主要是将外部 Flash 里存储的蓝牙固件挂载为 `"/dev/bt_image"`,下面依次介绍如何添加这些配置项:
+
+打开 SFUD:
+
+![](images/image-20210909153035908.png)
+
+添加 FAL 组件,并选中 **FAL 使用 SFUD 驱动程序**:
+
+![](images/image-20210909153151668.png)
+
+还需要开启 **使用 MTD Nor flash 设备驱动程序**:
+
+![](images/image-20210909153511179.png)
+
+选中 SPI1,和 UART3 。SPI1 是用来驱动外部 Flash 的,而 UART3 用于和蓝牙模组 AP6212A 通信。
+
+![](images/image-20210909153255448.png)
+
+在 `board.h` 文件里添加 UART3 使用的引脚:
+
+```c
+#define BSP_USING_UART3
+#define BSP_UART3_TX_PIN       "PB10"
+#define BSP_UART3_RX_PIN       "PB11"
+```
+
+这样,ART-Pi 蓝牙开发的最小环境就配置完成了。
+
+----
+
+**注意:**ART-Pi 在出厂时就已经将 AP6212A 的蓝牙固件烧写进了外部 Flash 里,若没有则需要参考[教程](https://github.com/RT-Thread-Studio/sdk-bsp-stm32h750-realthread-artpi/blob/master/documents/UM5003-RT-Thread%20ART-Pi%20BT_WIFI%20%E6%A8%A1%E5%9D%97%E5%9B%BA%E4%BB%B6%E4%B8%8B%E8%BD%BD%E6%89%8B%E5%86%8C.md)手动烧写。
+
+

TEMPAT SAMPAH
docs/images/image-20210908140709058.png


TEMPAT SAMPAH
docs/images/image-20210908161727516.png


TEMPAT SAMPAH
docs/images/image-20210908162059277.png


TEMPAT SAMPAH
docs/images/image-20210908165123333.png


TEMPAT SAMPAH
docs/images/image-20210908170645234.png


TEMPAT SAMPAH
docs/images/image-20210909153035908.png


TEMPAT SAMPAH
docs/images/image-20210909153151668.png


TEMPAT SAMPAH
docs/images/image-20210909153255448.png


TEMPAT SAMPAH
docs/images/image-20210909153511179.png


TEMPAT SAMPAH
docs/images/image-20210909153834893.png


TEMPAT SAMPAH
images/image-20210619113837336.png


+ 1 - 0
mkdocs.yml

@@ -15,6 +15,7 @@ nav:
     - 'ubuntu18.04 rtthread qemu 环境搭建': rtthread_ubuntu18.04_qemu环境搭建.md
     - 'rtthread qemu ble 环境': rtthread_qemu_ble.md
     - 'testcases': testcases.md
+    - 'ART-Pi 蓝牙开发最小环境': artpi_minimal_environment.md
     
 
 markdown_extensions:

+ 51 - 0
porting/chipset/bcm.c

@@ -104,3 +104,54 @@ hm_chipset_t* hm_chipset_get_instance(void)
 {
     return &chipset_bcm;
 }
+
+
+#ifdef HM_USING_BOARD_ART_PI
+
+#define BT_FIRMWARE_PARTITION_NAME "bt_image"
+static int bt_firmware_create(void)
+{
+    rt_kprintf("bt firmware start create.\n");
+
+    rt_device_t bt_firmware = RT_NULL;
+    const struct fal_partition *bt_partition = RT_NULL;
+
+    bt_partition = fal_partition_find(BT_FIRMWARE_PARTITION_NAME);
+    if (bt_partition == NULL)
+    {
+        rt_kprintf("%s partition is not exist, please check your configuration!\n", BT_FIRMWARE_PARTITION_NAME);
+        return -1;
+    }
+
+    //create bt device fs
+    bt_firmware = fal_char_device_create(BT_FIRMWARE_PARTITION_NAME);
+    if (bt_firmware == NULL)
+    {
+        rt_kprintf("bt firmware device create failed\n");
+        return -1;
+    }
+
+    return 0;
+}
+
+#include <spi_flash.h>
+#include <drv_spi.h>
+static int rt_flash_init(void)
+{
+    extern rt_spi_flash_device_t rt_sfud_flash_probe(const char *spi_flash_dev_name, const char *spi_dev_name);
+    extern int fal_init(void);
+
+    rt_hw_spi_device_attach("spi1", "spi10", GPIOA, GPIO_PIN_4);
+
+    /* initialize SPI Flash device */
+    rt_sfud_flash_probe("norflash0", "spi10");
+
+    fal_init();
+
+    bt_firmware_create();
+
+    return 0;
+}
+INIT_ENV_EXPORT(rt_flash_init);
+
+#endif