K210 Q/A


  • Staff |  Mod

    综合性问题

    从哪儿购买K210芯片和开发板样品?

    从哪儿获取K210的开发资料和技术支持?

    开发环境

    怎样搭建开发环境?

    • 命令行开发

      支持WindowsUbuntu,搭建过程参考附录I

    支持的调试器有哪些?

    K210使用openocd进行调试,openocd支持的调试器都可以使用,比如JLink,具体可以参考openocd的文档.

    是否支持SWD接口?

    不支持,K210采用RISC-V架构,RISC-V没有实现SWD接口。

    Openocd连接JLink失败

    1. 确认JLink驱动安装成功,Windows下需要使用zadig-2.4.exe将JLink驱动转换为WinUSB驱动。
    2. 检查JLink的Vref电压是否正确。

    如何进入ISP模式?

    将IO16拉低的同时复位芯片。

    是否支持JTAG直接将固件下载到FLASH中?

    不支持,请使用Kendryte的固件下载工具。

    Windows下怎样使用K-Flash烧录用户程序和模型数据文件?

    1. 新建flash-list.json脚本文件,内容如下:
    {
      "version": "0.1.0",
      "files": [
        {
          "address": 0,
          "bin": "usercode.bin",
          "sha256Prefix": true
        },
        {
          "address": 0x00040000,
          "bin": "model.bin",
          "sha256Prefix": false
        }
      ]
    }
    

    :其中usercode.bin表示用户程序,其烧写地址必须为0;model.bin表示模型数据文件,其烧写地址需避开usercode.bin占用的空间后在FLASH的容量范围内自定义。

    1. 将flash-list.json、usercode.bin和model.bin使用ZIP压缩,然后将压缩文件后缀名改为kfpkg。

      :也可以只烧录usercode.bin或model.bin,flash-list.json及压缩文件中只保留相应的部分即可。

    2. 使用K-Flash烧录。

    KPU

    每一层最大输入尺寸是多少?

    不大于320*256,不小于4*4

    数据排布是NCHW还是NHWC?

    NCHW

    支持什么样的卷积算子?

    普通卷积

    ksize stride required tensorflow padding
    1*1 1 same或valid
    3*3 1 same
    3*3 2 卷积前将feature map手动padding一圈,然后卷积时padding方式用valid

    注:ksize=3*3, stride=2的卷积要求输入feature map的size必须是偶数。

    depthwise卷积

    ksize stride required tensorflow padding
    3*3 1 same
    3*3 2 卷积前将feature map手动padding一圈,然后卷积时padding方式用valid

    注意:

    1. ksize=3*3, stride=2的depthwise卷积要求输入feature map的size必须是偶数。
    2. depth_multiplier只能为1,即只支持输入通道数与输出通道数相同的情况。

    支持什么样的 Pooling?

    ksize stride required tensorflow padding
    2*2 1 same
    2*2 2 如果feature map size是ksize的整数倍,same或valid;否则valid
    4*4 4 如果feature map size是ksize的整数倍,same或valid;否则valid

    注意:为了避免信息丢失,推荐设计网络时使pooling层的输入feature map size为ksize的整数倍。
    所有通道必须使用相同的激活函数,支持任意类型激活函数。

    是否支持自定义层?

    KPU只支持卷积相关运算,如果自定义层不是这样的操作,则需要CPU来做

    Peripherals

    有哪些功能模块和外设接口?

    功能模块或外设接口 数量 说明
    CPU 2 RISC-V双核64位,各自带独立FPU
    KPU 1 神经网络处理器,对卷积、批归一化、激活、池化进行硬件加速,输入图像分辨率不超过320*256
    APU 1 负责语音方向扫描和语音数据输出的前处理工作,最多支持8路音频输入数据,最多支持16个方向的声源扫描,内置FFT
    SRAM 8MiB 其中2MiB为KPU专用,剩余6MiB由用户程序和模型数据共用
    高级加密加速器(AES) 1 支持ECB、CBC、GCM三种加密/解密模式,支持128位、192位、256位三种长度
    安全散列算法加速器(SHA) 1 支持256位
    快速傅里叶变换加速器(FFT) 1 支持64点、128点、256点和512点运算
    看门狗定时器(WDT) 2
    定时器(Timer) 3 64位时基计数器
    实时时钟(RTC) 1
    DMAC 1 支持6个通道
    数字视频接口(DVP) 1 连接DVP接口摄像头,支持YUV422或RGB565格式的图像输入,不使用KPU的情况下最高可输入分辨率1920*1023
    UART 4 其中UART0仅限于调试用
    SPI 4 其中SPI0、SPI1、SPI3为master,SPI2为slave;SPI0、SPI1支持1/2/4/8线模式,SPI3支持1/2/4模式,SPI2仅支持单线半双工模式;FLASH必须接到SPI3
    I2C 3
    I2S 3 每个I2S最多可支持4个立体声通道
    GPIO 8
    高速GPIO(GPIOHS) 32

    FPIOA的作用是什么?

    FPIOA是现场可编程IO阵列的简称,允许用户将255个内部功能映射到芯片外围的48个自由IO上。

    CPU的最高运行频率是多少?

    CPU不超频不加压可达400MHz, 不加压超频可达600MHz.

    SPI速度能达到多少?

    SPI0、SPI1、SPI3为spi master,时钟速率最高80MHz;SPI2为spi slave,时钟速率最高20MHz。
    但是我们实际测试的时候, SPI0, SPI1 的时钟速率可达150MHz

    SHA256的速度怎么样?

    输入56字节数据,做一次SHA256,需要10us左右。

    怎样连接WIFI?

    使用UART或者SPI。

    FFT的速度怎么样?

    512点FFT运算时间22us左右。

    UART的FIFO多大?

    32字节。

    DVP速度能达到多少?

    目前测试的结果是50MB/s

    Hardware

    K210是否有低功耗模式?

    K210没有低功耗模式,在要求低功耗的场合,可以考虑使用时上电、不使用时断电的可行性。

    有没有推荐的电源管理芯片?

    参考RYCHIP的RY1303。

    K210怎样连接双目摄像头?

    DVP接口分时复用,DVP接口和双目摄像头之间需要有切换电路。


  • Staff |  Mod

    附录I:K210命令行开发环境搭建指南

    概述

    ​ 本文介绍如何在UbuntuWindows下为K210搭建命令行开发环境。

    Ubuntu

    安装工具链

    1. 安装 build-essential 以获取 make 工具。
    $ sudo apt install build-essential
    
    1. 安装cmake
    $ sudo apt install cmake
    
    1. 勘智官网下载Ubuntu版本工具链,放到/opt目录并解压缩。
    $ sudo mv kendryte-toolchain-ubuntu-amd64-8.2.0.tar.gz /opt
    $ cd /opt
    $ sudo tar -zxvf kendryte-toolchain-ubuntu-amd64-8.2.0.tar.gz
    

    ​ 打开~/.bashrc文件,在文件末尾添加如下一行,将 /opt/kendryte-toolchain/bin 目录添加到PATH环境变量。

    export PATH=$PATH:/opt/kendryte-toolchain/bin
    

    ​ 使修改生效。

    $ source ~/.bashrc
    

    安装JLink驱动

    1. SEGGER网站下载JLink驱动deb包,这里以V6.32i版本为例。
    $ dpkg -i JLink_Linux_V632i_x86_64.deb
    
    1. 将JLink接到计算机上,检查其驱动是否已经正确安装。如果是,则会看到类似下面的信息。
    $ JLinkExe
    SEGGER J-Link Commander V6.32i (Compiled Jul 24 2018 15:20:49)
    DLL version V6.32i, compiled Jul 24 2018 15:20:43
    
    Connecting to J-Link via USB...O.K.
    Firmware: J-Link Ultra V4 compiled Apr 20 2018 16:46:34
    Hardware version: V4.00
    S/N: 504404532
    License(s): RDI, FlashBP, FlashDL, JFlash, GDB
    VTref=1.811V
    
    
    Type "connect" to establish a target connection, '?' for help
    J-Link>
    

    安装Openocd

    Kendryte Github下载Ubuntu版本的Openocd。这里以kendryte-openocd-0.2.2-ubuntu64.tar.gz 为例。

    $ sudo mv kendryte-openocd-0.2.2-ubuntu64.tar.gz /opt
    $ cd /opt
    $ sudo tar -zxvf kendryte-openocd-0.2.2-ubuntu64.tar.gz
    

    : 可能需要安装如下依赖包。

    $ sudo apt install libusb-dev libftdi-dev libhidapi-dev
    

    编译

    1. Kendryte Github下载kendryte-standalone-sdk
    $ git clone git@github.com:kendryte/kendryte-standalone-sdk.git
    
    1. 把源文件目录例如hello_world放进kendryte-standalone-sdk/src目录。
    2. kendryte-standalone-sdk目录创建并进入build目录。
    3. 运行cmake
    $ cmake .. -DPROJ=hello_world -DTOOLCHAIN=/opt/kendryte-toolchain/bin
    
    1. 编译。
    $ make
    

    调试

    1. 运行openocd。
    $ cd /opt/kendryte-openocd
    $ ./bin/openocd -f ./tcl/kendryte.cfg
    Open On-Chip Debugger 0.10.0+dev-ga938338 (2018-09-12-11:27)
    Licensed under GNU GPL v2
    For bug reports, read
    	http://openocd.org/doc/doxygen/bugs.html
    adapter speed: 3000 kHz
    Info : J-Link Ultra V4 compiled Apr 20 2018 16:46:34
    Info : Hardware version: 4.00
    Info : VTarget = 1.811 V
    Info : clock speed 3000 kHz
    Info : JTAG tap: riscv.cpu tap/device found: 0x04e4796b (mfg: 0x4b5 (<unknown>), part: 0x4e47, ver: 0x0)
    Info : Examined RISCV core; XLEN=64, misa=0x800000000014112d
    Info : Listening on port 3333 for gdb connections
    Info : [0] Found 4 triggers
    halted at 0x80008b74 due to debug interrupt
    Info : Listening on port 6666 for tcl connections
    Info : Listening on port 4444 for telnet connections
    
    1. 运行 gdb。

      进入kendryte-standalone-sdk/build目录,打开另一个terminal

    $ riscv64-unknown-elf-gdb hello_world --eval-command="target remote 127.0.0.1:3333"
    

    ​ 其中:

    • hello_world是编译过程生成的elf文件。

    • 127.0.0.1表示本地IP地址。也可以指定远程地址。

    • 3333是openocd监听的端口号。

      成功连接openocd后,就可以使用loadbreakcontinue等gdb命令来调试了。

      : gdb手册参考gdb website

    下载

    1. Kendryte Github下载kflash.py脚本。
    2. 下载bin文件到K210.
    $ sudo python3 kflash.py kendryte-standalone-sdk/build/hello_world.bin
    

    : 可以使用-p选项指定下载端口。

    Windows

    安装工具链

    1. 下载cmake V3.0之后的Windows版本。这里以V3.12.2版本为例。

      cmake安装到cmake-3.12.2-win64-x64目录,并把cmake-3.12.2-win64-x64\bin目录添加到PATH环境变量。

    2. 勘智官网下载Windows版本工具链,解压缩后将kendryte-toolchain\bin目录添加到PATH环境变量。

    安装JLink驱动

    1. SEGGER下载Windows版本JLink驱动包并安装。
    2. 将JLink接到计算机上,打开SEGGER\JLink_V632i目录,检查其驱动是否已经正确安装。
    > Jlink.exe
    

    安装Openocd

    1. Kendryte Github下载Windows版本的Openocd并解压缩。
    2. 运行kendryte-openocd\tool目录下的zadig-2.4.exeOptions->List all devices,选择JTAG调试器,将其驱动转换为WinUSB

    编译

    1. Kendryte Github下载kendryte-standalone-sdk
    2. 把源文件目录例如hello_world放进kendryte-standalone-sdk/src目录。
    3. kendryte-standalone-sdk目录创建并进入build目录。
    4. 运行cmake
    > cmake .. -DPROJ=hello_world -DTOOLCHAIN="xxxx/kendryte-toolchain/bin" -G "MinGW Makefiles"
    

    其中xxxx为工具链的安装目录。

    1. 编译。
    > mingw32-make
    

    调试

    1. 运行openocd。

      cmd进入kendryte-openocd目录。

    > .\bin\openocd.exe -f .\tcl\kendryte.cfg
    
    1. 运行gdb。

      从另外一个cmd窗口进入kendryte-standalone-sdk\build目录。

    > riscv64-unknown-elf-gdb hello_world --eval-command="target remote 127.0.0.1:3333"
    

    其中:

    • hello_world是编译过程生成的elf文件。

    • 127.0.0.1表示本地IP地址。也可以指定远程地址。

    • 3333是openocd监听的端口号。

      成功连接openocd后,就可以使用loadbreakcontinue等gdb命令来调试了。

      : gdb手册参考gdb website

    下载

    1. Kendryte Github下载Windows版本K-flash工具。
    2. 运行K-flash.exe,选择DeviceFirmware,例如hello_world.bin,点击Flash

Locked