19

Medivh · 2022年07月04日

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

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

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

1.jpg

再认真看一下配置……

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

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

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

2.png

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

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

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

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

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

3.png

嵌入式系统工具和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

5.png

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

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

7.png

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

8.png

此次重点测评的四个特性

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

一、Hello Word

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

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

44.png

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

45.png

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

46.png

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

9.png

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

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

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

10.png

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

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

11.png

二、GPIO点灯

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

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

还是执行命令:
lisa zep create

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

12.png

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

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

我这里的示例代码是:

#include <zephyr.h>
#include <device.h>
#include <devicetree.h>
#include <drivers/gpio.h>

/* 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
#endif

void 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次了。

08.gif

三、Wi-Fi连接

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

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

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

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

14.png

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

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

15.png

相关main.c代码内容:

/*
 * SPDX-License-Identifier: Apache-2.0
 */

#include <stdlib.h>
#include <sys/printk.h>
#include <sys/sys_heap.h>

#include <net/net_if.h>
#include <net/net_core.h>
#include <net/net_context.h>
#include <net/net_mgmt.h>

#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
    };

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

16.png

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

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

四、MicroPython交互

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

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

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

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

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

17.png

我这里主要使用的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 库名”的方式。

18.png

然后继续编译,烧录……

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

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

19.png

小结:

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

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

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

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

20.png

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

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

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

推荐阅读
关注数
6804
内容数
6
ARM物联网相关技术的探索和研究
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息