> 文档中心 > 【带NPU和DSP的聆思科技MCU来了】

【带NPU和DSP的聆思科技MCU来了】

 最近拿到一块思科技的CSK-6-NanoKit开发板,据说可广泛应用于家居家电、智能车载、智能教育、智能办公、智能安防、工业智能化和消费电子等地方。

乍一看,好像是一块普通的MCU。

 再认真看一下配置……

跟普通的MCU不太一样,带NPU和DSP的

采用安谋科技“星辰”STAR-MC1 + HIFI4 双核架构,主频最高支持300MHz。

集成为神经网络操作设计的NPU,深度适配科大讯飞AI算法,算力达128GOPS。

不过让人意外的是,这款开发板默认支持的操作系统不是久负盛名的FreeRTOS,也不是国货之光RT-Thread和OpenHarmony,而是Zephyr RTOS。

 

Zephyr RTOS是一款由Linux基金会主导的、针对资源受限设备进行优化过的开源RTOS,为高性能、低功耗的物联网应用而设计。因为其先进的特性,很多芯片厂商也将Zephyr RTOS作为其优先适配的操作系统。

聆思科技CSK6 沿用了 Zephyr 的设计, 采用 SDK 与 项目工程 分离的形式,通过构建系统,将项目工程的代码与 SDK 进行关联编译。

这意味着 SDK 与 项目源码 是可以存放在不同的路径下的。

这样做有两个好处,一方面是可以最大的保证项目源码的简洁,另一方面 SDK 也可以进行小版本的快速升级,而应用程序不会受其影响。

 

嵌入式系统工具和SDK的部署

聆思科技在这里贴心的为大家准备了Windows、MacOS、Ubuntu三款流行操作系统的安装工具。

Windows用户(下载后安装):
https://castor.iflyos.cn/castor/v3/lisaPluginZephyr/download?platform=windows

MacOS和Ubuntu用户(命令行执行):

curl -o- https://cdn.iflyos.cn/public/cskTools/lisa-zephyr-install.sh | bash

有了这个工具,大家就可以在命令行下安装相关SDK和开发环境了。

相关命令:
lisa zep install

 

检查一下环境是否安装成功。

这里主要是安装Git和一些核心插件,如果的机器上已经满满当当,可以放心下一步。

 

拉取CSK6对应的SDK之后,就可以正式开始测试了。

 

此次重点测评的四个特性

A、Hello World(实时输出)
B、点亮LED(GPIO控制)
C、Wi-Fi连接
D、MicroPython交互

一、Hello Word

这个开发板上有个实时复位的按键,我们这里来完成一个每次按键就能输出一行字符的功能。

执行命令:lisa zep create,然后选择其中的“hello_world”。

 它会自动生成一个项目,我们进入该项目文件夹,可以看到源码目录和其它的一些配置文件。

 进入src目录,修改main.c文件为我们所要的效果。

 再执行编译命令:
lisa zep build -b csk6002_9s_nano

 如果编译没有出错,接下来就可以烧录进开发板了。

由于NanoKit开发板集成了DAPLINK烧录器,因此支持使用pyocd进行代码烧录。

连接好开发板的USB线,执行以下命令:
lisa zep flash

 烧录完成后,运行Putty,选择连接开发板后生成的串口,波特率设置为115200。

我这里已经可以看到结果了。

 二、GPIO点灯

大部分外设的调试,都是从点灯开始的。

这也几乎是嵌入式工作的一项基本操作,重点就是考察开发板的“通用输入输出”功能。

还是执行命令:
lisa zep create

然后选择basic目录里的blinky,系统会自动创建blinky这个项目文件夹。

 在prj.conf文件中添加项目基础组件配置:
CONFIG_GPIO=y

然后再编辑src目录里的main.c文件。

我这里的示例代码是:

#include #include #include #include /* 1000 msec = 1 sec */#define SLEEP_TIME_MS   1000/* The devicetree node identifier for the "led0" alias. */#define LED0_NODE DT_ALIAS(led0)#if DT_NODE_HAS_STATUS(LED0_NODE, okay)#define LED0    DT_GPIO_LABEL(LED0_NODE, gpios)#define PIN DT_GPIO_PIN(LED0_NODE, gpios)#define FLAGS   DT_GPIO_FLAGS(LED0_NODE, gpios)#else/* A build error here means your board isn't set up to blink an LED. */#error "Unsupported board: led0 devicetree alias is not defined"#define LED0    ""#define PIN 0#define FLAGS   0#endifvoid main(void){    const struct device *dev;    bool led_is_on = true;    int ret;    dev = device_get_binding(LED0);    if (dev == NULL) { return;    }    ret = gpio_pin_configure(dev, PIN, GPIO_OUTPUT_ACTIVE | FLAGS);    if (ret < 0) { return;    }    while (1) { gpio_pin_set(dev, PIN, (int)led_is_on); led_is_on = !led_is_on; k_msleep(SLEEP_TIME_MS);    }}

继续编译固件:
lisa zep build -b csk6002_9s_nano

确保通过USB连接PC,烧录固件。
lisa zep flash --runner pyocd

一切顺利的话,应该能看到开发板上的绿色LED每隔一秒亮1次了。

 

三、Wi-Fi连接

作为一款多功能开发板,Wi-Fi是最基本的。

这里实现一个连接Wi-Fi热点,并打印相关信息到串口的操作。

我先设置一个Wi-Fi热点。
SSID:Meegoo
密码:abcd1234

然后继续创建项目:
lisa zep create

 依次选择boards → csk6 → network → wifi_sta。

我这里是把SSID和密码写进Kconfig文件的。

 相关main.c代码内容:

/* * SPDX-License-Identifier: Apache-2.0 */#include #include #include #include #include #include #include #include "csk6/csk_wifi.h"static csk_wifi_event_cb_t wifi_event_cb;static struct net_mgmt_event_callback dhcp_cb;static void handler_cb(struct net_mgmt_event_callback *cb, uint32_t mgmt_event, struct net_if *iface){    if (mgmt_event != NET_EVENT_IPV4_DHCP_BOUND) { return;    }    char buf[NET_IPV4_ADDR_LEN];    printk("Your address: %s\n", net_addr_ntop(AF_INET, &iface->config.dhcpv4.requested_ip, buf, sizeof(buf)));    printk("Lease time: %u seconds\n", iface->config.dhcpv4.lease_time);    printk("Subnet: %s\n", net_addr_ntop(AF_INET, &iface->config.ip.ipv4->netmask, buf, sizeof(buf)));    printk("Router: %s\n", net_addr_ntop(AF_INET, &iface->config.ip.ipv4->gw, buf, sizeof(buf)));}static void wifi_event_handler(csk_wifi_event_t events, void *event_data, uint32_t data_len, void *arg){    if (events & CSK_WIFI_EVT_STA_CONNECTED) { printk("[WiFi sta] connected\n");    } else if (events & CSK_WIFI_EVT_STA_DISCONNECTED) { printk("[WiFi sta] disconnected\n");    } else { abort();    }}void main(void){    csk_wifi_init();    wifi_event_cb.handler = &wifi_event_handler;    wifi_event_cb.events = CSK_WIFI_EVT_STA_CONNECTED | CSK_WIFI_EVT_STA_DISCONNECTED;    wifi_event_cb.arg = NULL;    csk_wifi_add_callback(&wifi_event_cb);    csk_wifi_sta_config_t sta_config = { .ssid = CONFIG_EXAMPLE_WIFI_SSID, .pwd = CONFIG_EXAMPLE_WIFI_PASSWORD, .encryption_mode = CSK_WIFI_AUTH_WPA2_PSK    };

继续生成镜像并烧录,然后重置(按复位按钮),查看结果。

 可以看到,已经成功连接Wi-Fi热点,并获取IP地址了。

接下来,数据传输什么的功能,可以自己添加了。

四、MicroPython交互

前面三个功能都是经典C语言实现的,
其实聆思科技还有一个重头戏 —— 适配MicroPython。

这是Python 在微处理器上运行一个轻量化的版本,可以帮助产品设计者快速实现原型。

聆思科技在搭建 MicroPython 应用开发环境的同时,完完全全的保留了 Zephyr 原生应用开发的环境,使得你既可以快速的从原生应用上加入对 MicroPython 的支持,也可以在 MicroPython 应用项目内增加原生代码(如 C 语言)的业务实现。

执行命令:
lisa install @lisa-plugin/micropython -g

这个包有点大,要耐心等一会儿。成功装完之后是这样的。

 我这里主要使用的lisa版本和MicroPython版本分别是:
listenai/lisa - 2.4.2
micropython - 0.1.3

安装好插件后,继续拉取 MicroPython SDK 相关源码。这些源码将会在编译 MicroPython 应用时被引用。
lisa mpy use-sdk

友情提示:
1、我这里常规Windows命令行状态有报“process.title cannot be used as a valid name”的错误,但在Powershell状态下可以顺利运行。

2、如果你希望在新建MicroPython项目时,pip某个库文件。可以用:“lisa mpy pip:install 库名”的方式。

 然后继续编译,烧录……

注:这个过程很慢,你可以先去泡杯咖啡再回来。

如果没有报错的话,你应该可以通过串口进行相关Python操作了(我这里是COM6)。

 小结:

首先,聆思科技对Zephyr RTOS确实做到了高度适配。

为了方便开发者,提供了大量的工具包和示例。

即使Zephyr RTOS在国内算“小众”嵌入式系统,他们的工具和文档也可以让新手快速进入开发状态。

比如这个名为“Lisa”的核心配置工具,确实是一款非常省事的利器。

 不过由于开发板刚推出没多久,他们的各种线上资源也在不停的升级,所以各位尝鲜的朋友或多或少会遇到一些坑。等他们发布正式版之后应该会好很多。

当然,我这里只是抛砖引玉,用到了CSK-6-NanoKit的一些基础功能。

实际这个板子还有大量潜力可以挖掘,音频处理、人工智能识别……都可以整起来。