移植指南

更新时间:2022-11-24 09:20:02下载pdf

本文介绍如何对 Beacon 设备进入进行移植。

环境准备

  • IDE

    根据芯片原厂 SDK 要求进行安装。

  • 硬件环境

    硬件平台可以选用芯片原厂对应的开发板,或者使用自研 PCBA。ty_iot_beacon_sdk 是基于芯片原厂开发板开发测试的。

移植说明

核心组件移植

components 层包含 Tuya Beacon 协议栈核心组件,包括 ty_xxtea 组件、 ty_base64 组件和 ty_beacon 组件,移植时直接将 components 中的所有的静态库文件和头文件加入目标工程。

组件 说明
ty_xxtea 负责加密,服务于 ty_beacon
ty_base64 负责base64解码,服务于 ty_beacon
ty_beacon 负责核心beacon通信协议

蓝牙适配层实现

移植时直接将 bal 中的所有文件和头文件加入目标工程,基于目标平台实现 bal_beacon_txrx 函数,目前涂鸦提供的标准芯片 SDK 中已经实现了 bal_beacon_txrx 。

核心硬件抽象层实现

Tuya Beacon 协议栈中的防重放序列号,加密 key 等信息需要借助一个 256 字节任意位置读写的非易失存储驱动,和一个用来给协议栈提供定时逻辑的 us 级别的系统滴答驱动,用户需要在该层中按照 Board 层 - 硬件抽象层 的要求实现存储功能和 us 级别的 systick。

对于标准芯片 SDK ,涂鸦已经适配好硬件抽象层,用户可直接将下列适配好的文件加入工程:

适配文件名 作用
hal_storage_256.h 读写非易失存储函数声明
hal_storage_256.c 读写非易失存储函数实现
hal_clock.h 获取当前 tick 值与定时函数声明
hal_clock.c 获取当前 tick 值与定时函数实现
hal_sys.h 系统头文件汇总
hal_types.h 数据类型定义
board.h hal 层头文件汇总

应用层实现

目前开放的 Beacon SDK 已经实现应用层的重要函数,只需用户直接将 app_main.capp_dps.capp_dps.h 移植到目标工程中即可。

授权

开发调试阶段常使用 授权码清单 给调试设备授权,在代码中写入授权信息。授权码清单获取,参考常见问题。以 AC6329C2 芯片平台为例,使用该方式授权时,必须注释掉从flash中读取授权信息的接口,将 授权码清单 中的 key[0]-key[15] 填入 authkey[17] ,将 授权码清单 中的 mac 填入 mac[6] ,将 IoT 开发平台创建产品生成的 product key 填入 pid[9]。

u8 mac[6] = {0xdc,0x23,0x4d,0x7e,0x35,0xe5};
u8 authkey[17] = "************";
u8 pid[9] = "*******";
u8 version = 0x10;//1.0
u16 kind = 0x0103;

//	get_anthkey(authkey);

	printf("authkey:\r\n");
	put_buf(authkey,16);

//	get_mac(mac);

        ty_beacon_init(mac,authkey,pid,version,kind);

        if(ty_beacon_get_state() == DEVICE_STATE_NOT_PAIRED)
		ty_beacon_start_pairing();
	

找到 app_multi_conn.c ,屏蔽 syscfg_read(NV_USER_MAC_ADDR, ty_ble_addr, 6),修改 ty_ble_addr[6] 的值为 mac 的值。

        //u8 tmp_ble_addr[6];
        #if 1
//	u8 ty_ble_addr[6] = {0xe5,0x35,0x7e,0x4d,0x23,0x23};
	u8 ty_ble_addr[6] = {0xdc,0x23,0x4d,0x7e,0x35,0xe5};
	#endif
	#if 0
	u8 ty_ble_addr[6] = {0x18,0x42,0x72,0x4d,0x23,0xdc};
	#endif
	#if 0
	u8 ty_ble_addr[6] = {0x1d,0x42,0x72,0x4d,0x23,0xdc};
	#endif
        /* le_controller_set_mac((void*)"012345"); */
        //lib_make_ble_address(tmp_ble_addr, (void *)bt_get_mac_addr());
        //syscfg_read(NV_USER_MAC_ADDR, ty_ble_addr, 6);

	//hal_flash_read_page(0x3000,6,ty_ble_addr);
        le_controller_set_mac((void *)ty_ble_addr);

        printf("\n-----edr + ble 's address-----");
        printf_buf((void *)bt_get_mac_addr(), 6);
        printf_buf((void *)ty_ble_addr, 6);