更新时间:2024-11-20 08:51:24下载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.c
、app_dps.c
、app_dps.h
移植到目标工程中即可。
开发调试阶段常使用 授权码清单 给调试设备授权,在代码中写入授权信息。授权码清单获取,参考常见问题。以 AC6329C2
芯片平台为例,使用该方式授权时,必须注释掉从flash中读取授权信息的接口,将 授权码清单 中的 key[0]-key[15] 填入 authkey[17] ,将 授权码清单 中的 mac 填入 mac[6] ,将开发者平台创建产品生成的 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);
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈