HWINFO 驱动经常被用作监控硬件温度、查看超频设置参数是否设定成功、排除故障。本示例将演示如何获取设备的唯一标识符和芯片类型,并将这些信息打印到控制台。
ssize_t hwinfo_get_device_id (uint8_t *buffer, size_t length)
此例程将设备 ID 的“length”字节数复制到缓冲区。如果设备 ID 小于长度,则缓冲区的其余部分保持不变。ID 取决于硬件,不能保证唯一。
驱动程序负责确保 ID 数据结构是字节序列。返回的 ID 值不应根据特定于供应商的字节顺序假设进行解释。它应该将标识符表示为原始字节序列,执行任何必要的字节序转换,以便字节的十六进制表示产生预期的序列号。
参数说明
字段 | 说明 |
---|---|
buffer | 要将 ID 写入的缓冲区 |
length | 缓冲区的最大长度 |
返回值说明
返回值 | 说明 |
---|---|
size | 复制的设备 ID |
-ENOSYS | 是否没有针对特定设备的实现 |
any | 驱动程序特定错误的负值 |
int hwinfo_get_device_eui64 (uint8_t *buffer)
将设备 EUI64 复制到缓冲区。
此例程将设备 EUI64(8 字节)复制到缓冲区。EUI64 取决于硬件,并保证唯一。
参数
参数说明
字段 | 说明 |
---|---|
buffer | 要将 ID 写入的 8 个字节的缓冲区 |
返回值说明
返回值 | 说明 |
---|---|
zero | 成功 |
-ENOSYS | 是否没有针对特定设备的实现 |
any | 驱动程序特定错误的负值 |
更多hwinfo driver 信息可查看Zephyr官网Hardware Info Interface。
SDK 中提供了 hwinfo 的示例。
{SDK}\.sdk\csk\samples\driver\hwinfo
演示如何获取设备的唯一标识符和芯片类型,并将这些信息打印到控制台。
适用开发板:大模型开发套件
编译版型:csk6_duomotai_devkit
在 SDK 根目录(duomotai_ap
)下可通过执行以下指令进行对该示例工程的编译:
lisa zep build -b csk6_duomotai_devkit .sdk/csk/samples/driver/hwinfo/ -p
编译完成后,编译产物二进制文件位于 build\zephyr\zephyr.bin
使用 Type-C 数据线连接开发套件的 DAP_USB
接口,选中以下其中一种方式对固件进行烧录:
cskburn desktop
是一款聆思推出的桌面烧录工具,在下载并安装 cskburn desktop 烧录工具后,双击图标运行软件:
1.点击串口下拉框,选择连接开发套件后识别到的串口编号;
2.将编译输出的.bin
文件拖拽进烧录区域;
3.点击开始烧录,等待烧录完成。
若您已按照 《环境搭建》 教程完成开发环境的安装,可在编译完成后执行 lisa zep exec cskburn
指令完成烧录。
lisa zep exec cskburn -s \\.\COMxx -C 6 -b 1500000 0x000000 --verify-all .\build\zephyr\zephyr.bin
请将命令行中的的 COMx 替换为开发套件在 PC 上对应的串口号(可通过设备管理器查看)。例如:
COM3
。
lisa zep exec cskburn -s PORT -C 6 0x000000 --verify-all ./build/zephyr/zephyr.bin -b 1500000
请将命令行中的 PORT 替换为开发套件连接在 PC 上对应的串口号。例如:
/dev/ttyUSB0
。
烧录完成后,连接串口终端,当按动开发板 RST 按键时,可看到串口有对应的信息输出。
以下代码与注释已省略一部分非关键接口代码,主要呈现示例的主业务流程与主要接口的使用。
CONFIG_HWINFO=y
1.硬件获取设备 ID
length = hwinfo_get_device_id((uint8_t *)&buffer, sizeof(buffer));
2.检查获取的长度
if(length != sizeof(buffer)){
printk("length error (%d)\n", length);
return -1;
}
按下开发板复位按钮,运行程序,在控制台中可以看到打印信息。
int main(void)
{
uint32_t buffer[3] = {0};
uint64_t chip_id = 0;
uint32_t chip_type = 0;
size_t length = 0;
length = hwinfo_get_device_id((uint8_t *)&buffer, sizeof(buffer));
if(length != sizeof(buffer)){
printk("length error (%d)\n", length);
return -1;
}
memcpy((void*)&chip_id, (void*)buffer, sizeof(chip_id));
printk("chip id: 0x%llx\n", chip_id);
memcpy((void*)&chip_type, (void*)&buffer[2], sizeof(chip_type));
printk("chip type: %x\n", chip_type);
printk("get device id success\n");
return 0;
}