首先感谢LISTENAI & 极术社区给与的机会!
试用期间正好幸运的赶上清零末班车,被隔离闭关了好几天,出关后又林林总总诸多杂事需要处理,所以一直等到最后才交作业,惨惨惨!
一、芯片介绍
CSK6是聆思科技新一代的 AI 芯片 SoC 产品系列,采用多核异构架构,集成了 ARM Star MCU,HiFi4 DSP,以及聆思全新设计的 AI 神经网络处理内核 NPU,算力达到 128 GOPS。多核异构的设计使芯片能以较低功耗满足音频及图像视频的 AI 应用需求。
CSK6系列芯片集成了 SRAM 与 PSRAM,支持内置或外接Flash,可提供最高 4 入 2 出的 Audio Codec,VGA 像素的 DVP 摄像头接口,多达 6 路的触控检测以及 SPI、UART、USB、SDIO、I2C、I2S 等各类外设接口,丰富接口支持各类应用方案的开发。
拿到的聆思CSK6视觉AI开发套件基于CSK6011A芯片,较之CSK6012,CSK6011A的主要区别在于FLASH是否外置,这能灵活适应于不同资源的应用场景。
CSK6系列芯片最大的特点在于三核异构AI处理器:
**高达300MHz主频的ARM Star MCU;
高达300MHz主频的HIFI4 DSP;
128G OPS算力的NPU**。
二、功能设计
本次试用计划实现一个简易的AI手势控制显示系统,即通过CSK6视觉AI开发套件识别出具体手势,再连接特定的显示系统予以显示。显示系统试用启鸿QH01开发板的LED点阵显示,通过CSK6视觉AI开发套件的PIN口输出电平信息,由启鸿QH01开发板接收后予以显示,具体架构如下:
(一)硬件连接
使用CSK6视觉AI开发套件的GPIOA17/GPIOA18,以及一个GND,分别对接启鸿QH01开发板的0号、1号和GND针脚,具体连接如图:
(二)系统配置
Zephyr系统引入了DTS的概念,所以需要参考点亮LED的案例配置GPIOA17/GPIOA18。
具体如下:
aliases {
pin0= &board_pin0_label;//pin0
pin1= &board_pin1_label;//pin1
};
pins{
compatible = "gpio-pins";
board_pin0_label: board_pin0 {
gpios = <&gpioa 17 GPIO_ACTIVE_HIGH>;
label = "pin0";
};
board_switch1_label: board_pin1 {
gpios = <&gpioa 18 GPIO_ACTIVE_HIGH>;
label = "pin1";
};
};
三、软件实现
软件基于LISTENAI提供的demo上修改而来
git clone https://cloud.listenai.com/zephyr/applications/app_algo_hsd_sample_for_csk6.git
修改main.c完成设备树初始化,具体如下:
static const struct gpio_dt_spec gPin0 = GPIO_DT_SPEC_GET(DT_ALIAS(pin0), gpios);
static const struct gpio_dt_spec gPin1 = GPIO_DT_SPEC_GET(DT_ALIAS(pin1), gpios);
在main函数中完成如下:
//PIN0
if (device_is_ready(gPin0.port))
{
gpio_pin_configure_dt(&gPin0, GPIO_OUTPUT_INACTIVE);
}
else
{
return;
}
//PIN1
if (device_is_ready(gPin1.port))
{
gpio_pin_configure_dt(&gPin1, GPIO_OUTPUT_INACTIVE);
}
else
{
return;
}
并完成业务逻辑,识别YES拉高pin17电平,识别STOP拉高pin18电平:
while (1)
{
int ret = k_msgq_get(&msg, &msg_data, K_FOREVER);
if (ret != 0) {
LOG_WRN("Get video buffer timeout.");
continue;
}
switch (msg_data.event) {
case HSD_EVENT_GESTURE_RECOGNIZE:
switch (msg_data.hsd.gesture_state) {
case GESTURE_YES:
gpio_pin_set_dt(gPin0, GPIO_ACTIVE_HIGH);
gpio_pin_set_dt(gPin1, GPIO_ACTIVE_LOW);
break;
case GESTURE_STOP:
gpio_pin_set_dt(gPin1, GPIO_ACTIVE_HIGH);
gpio_pin_set_dt(gPin0, GPIO_ACTIVE_LOW);
break;
default:
//ignore GESTURE_LIKE GESTURE_OK GESTURE_OTHER GESTURE_SIX
gpio_pin_set_dt(gPin0, GPIO_ACTIVE_LOW);
gpio_pin_set_dt(gPin1, GPIO_ACTIVE_LOW);
break;
}
break;
default:
break;
}
}
最后,来自启鸿QH01的程序,采用拖拽完成:
四、运行
编译烧录。
(一)YES
(二)STOP
最后,基于AI控制GPIO仅仅是CSK6芯片的一小部分能力,其他更为丰富的支撑能力用于实现更有想象力的应用,请参考CSK6。