首次加载SD卡系统
【KV260视觉入门套件试用体验】1.从开箱上电到连接和编译测试过程 大信 ALSET
感谢安富利科技和烧友烧网给予的Xilinx KriaTM KV260视觉AI套件视觉入门套件试用机会。Xilinx KriaTMKV260 开发板全称是Kria KV260 Vision AI Starter Kit,即Kria KV260视觉AI入门套件。开发者可以通过该条件提供的多种开发系统,通过开发工具在多个领域进行开发应用,包括媒体应用软件、机器人控制、AI模型推理、乃至 FPGA设计。该套件是非常容易上手的功能强大的开发平台,并且通过核心模块化的设计,能够是得在该开发平台上开发的应用,能够在使用KriaTMK260系统模块(SOM)进行快速批量部署 KriaTM KV260是由核心模块和底板组成。其核心模块就是KV260 Module模块。该开发板支持八个接口的多摄像头、三个MIPI传感器接口、一个USB摄像头、一个内置ISP组件、HDMIDisplayPort输出以及千兆以太网和USB 3.0/2.0连接功能,允许开发人员针对任何传感器或接口进行扩展,访问Pmod生态系统。KV260针对视觉应用进行了优化,通过安森美 半导体的影像接入系统(IAS)和Raspberry Pi连接器提供多摄像头支持。 从其硬件能力推测这个模块可以再高级图形图像处理、高级成像、高级机器视觉、机器人控制等嵌入式应用等跨领域应用场景有广泛的适用。
一、开发套件介绍及开箱
收到快递后,是两个包装盒。如上图,其中一个是附件盒子,主要有网线, 电源,HDMI线缆、USB线还有一个mipi摄像头。另外一个盒子则是开发板套件了,盒子中有一个快速使用指南,一个开发者喜爱的身份贴纸,和开发板,开发板上的核心板和底板已经安装好,并且带了一个非常小巧的散热风扇。包装整体简洁明了紧凑。
取出静电包装中的开发板,非常有科技感:
包装盒以及开发板印刷上,可看到显眼的xilinxLOGO,标识着它特别的身份。
开发板大小约15cmX14cm大小,模块整体采用绿油 PCB板,白色丝印,核心板通过BTB接口插入底板座中,核心板上面安装了定制的散热器,并且这些已经组装好,取出后就可以开始使用,非常方便,避免让开发者自行去寻找散热器或者制作散热片等琐碎问题,大大减少上手的时间,缩短产品开发到成品的周期。 二、开发板技术特点介绍
在上手一个新的开发板时,有必要了解开发板的主要技术特征。即便是看起来非常普通的技术指标,它也意味着和我们过去所接触的开发知识有哪些相同的部分,又有哪些不同的地方。让我们充分的了解技术特征是用好开发板的基础。 l 视觉功能: 提供多摄像头支持:多达 8 个接口 3 个 MIPI 传感器接口、USB摄像头 内建 ISP 组件(安森美) HDMI、DisplayPort 输出 l 多种连接设备: 1Gb 以太网 USB 3.0 / 2.0 l 可扩展 可针对任何传感器或接口进行扩展 访问 Pmod 生态系统 l 方便易用 低成本,支持设计探索 AMD 和分销商提供 开发板接口资源如下图:
开发板主要技术参数指标: 参数 | KV260 | 器件 | Zynq™ UltraScale+™ MPSoC | 尺寸 | SOM + 载卡 + 热管理解决方案 | 入门套件规格 | 119mm x 140mm x 36mm | 散热解决方案 | 主动式热冷却解决方案(风扇 + 散热器) | 系统逻辑单元 | 256K | Block RAM 模块 | 144 | UltraRAM 模块 | 64 | DSP 片 | 1.2K | 以太网接口 | 1 X 10/100/1000Mb/s | DDR 内存 | 4GB (4 x 512Mb x 16 bit) [non-ECC] | 一级启动内存 | 512Mb QSPI | 辅助引导存储器 | SDHC 卡 | 器件安全性 | Zynq UltraScale+ MPSoC 硬件 RoT (root of trust),支持安全启动。支持测量启动过程中的 Infineon TPM2.0。 | 图像传感器处理器 | OnSemi AP1302 ISP | IAS MIPI 传感器接口 | x2 | Raspberry Pi 摄像头接口 | x1 | Pmod 12 引脚接口 | x1 | USB3.0/2.0 接口 | x4 | DisplayPort 1.2a | x1 | HDMI 1.4 | x1 | 三、连接开发板调试串口
连接好开发板各个接线,主要连接HDMI线到显示器,连接USB鼠标与键盘,连接以太网络网线口。开发板可以通过USB串口或者网络方式连接到开发主机。该开发板底板集成了USB转UART 的功能,可以直接使用micro USB线,连接开发板和电脑。如图所示,连接micro USB 到主机上可以进行调试。
把micro USB线接入底板debug USB口上,另外一头插入笔记本电脑USB口中,查看系统设备管理,出现两个新的串口提示:
可见底板的USB转串口使用的是FTDI芯片,因为Windows电脑里已经支持该USB转UART的驱动,因此直接支持可用,如果没有装FTDI的驱动,可以网上搜索FTDI系列的USB2UART的驱动安装即可支持。
在主机电脑上使用SccureCRT 终端软件启动快速连接,选择serial连接第一个串口,设定串口通讯各参数,速率115200, 8,N,1,点连接开发板,出现终端窗口提示连接成功。在连的时候,要把 RTS/CTS选项去掉,否则串口只能接收信息无法发送信息。
由于开发板内的QFLASH已经内置了boot系统,板子是从QFLASH中启动。因此接上电源就可以从串口看到启动时输出的信息了。
四、开发板SD卡系统准备
该开发板的开发文档在这里: https://china.xilinx.com/products/som/kria/kv260-vision-starter-kit.html#whatsinside 该开发板的软件资料链接: https://www.xilinx.com/products/som/kria/kv260-vision-starter-kit/kv260-get ting-started-ubuntu/setting-up-the-sd-card-image.html
按开发板上手指南,得知开发板没有预置EMMC等存储器件,而是采用使用SD卡的方式进行启动,需要开发者根据自己的需要烧写不同的开发板运行的镜像文件。 开发板启动时,由板上的QSPI的FLASH的uboot引导系统启动,在启动后会扫描SD卡,检测是否插入SD卡,以及尝试加载SD内的操作系统。 如果在没有插带有系统的SD卡时,开发板会由启动系统会显示如下:
启动的完整日志内容如下:
- Xilinx Zynq MP First Stage Boot Loader
- Release 2020.2 Apr 22 2021 - 17:48:34
- MultiBootOffset: 0x40
- Reset Mode : System Reset
- Platform: Silicon (4.0), Running on A53-0 (64-bit) Processor, Device Name: XCZUUNKNEG
- QSPI 32 bit Boot Mode
- FlashID=0x20 0xBB 0x20
- 8TPunning on XCK26/silicon v4/RTL5.1 at 0xfffea000
- NOTICE: BL31: v2.2(release):xilinx-v2020.2.2-k26
- NOTICE: BL31: Built : 17:45:02, Apr 22 2021
- U-Boot 2020.01 (Apr 22 2021 - 17:47:18 +0000)
- Model: ZynqMP SMK-K26 Rev1/B/A
- Board: Xilinx ZynqMP
- DRAM: 4 GiB
- PMUFW: v1.1
- Xilinx I2C FRU format at nvmem0:
- Manufacturer Name: XILINX
- Product Name: SMK-K26-XCL2G-ED
- Serial No: XFL1N3BJ34SW
- Part Number: 5057-01ED
- File ID: 0x0
- Revision Number: 1
- Xilinx I2C FRU format at nvmem1:
- Manufacturer Name: XILINX
- Product Name: SCK-KV-G
- Serial No: XFL1R3WFVTGH
- Part Number: 5066-01ED
- File ID: 0x0
- Revision Number: 1
- EL Level: EL2
- Chip ID: xck26
- NAND: 0 MiB
- MMC: mmc@ff170000: 1
- In: serial@ff010000
- Out: serial@ff010000
- Err: serial@ff010000
- Bootmode: QSPI_MODE
- Reset reason: SOFT
- Net: No ethernet found.
- Hit any key to stop autoboot: 0
- sdhci_send_command: MMC: 1 busy timeout increasing to: 200 ms.
- sdhci_send_command: MMC: 1 busy timeout increasing to: 400 ms.
- sdhci_send_command: MMC: 1 busy timeout increasing to: 800 ms.
- sdhci_send_command: MMC: 1 busy timeout increasing to: 1600 ms.
- sdhci_send_command: MMC: 1 busy timeout increasing to: 3200 ms.
- sdhci_send_command: MMC: 1 busy timeout.
- sdhci_send_command: MMC: 1 busy timeout.
- ZynqMP>
复制代码
按文档说明,需要在SD卡上准备板上的运行系统,烧写厂商提供的系统镜像,以视觉AI应用开发为目标则,则推荐安装厂商提供的最新的 uBuntu22.04 LTS版本。
点击下载iot-limerick-kria-classic-desktop-2204-x07-20230302-63.img.xz文件。该文件约2G多,下载到本地后,可以使用 balenaEtcher-Portable-1.5.EXE软件工具进行烧写,该工具也在上面的网站可以下载到。 打开该工具,选中刚下载的镜像文件,文件不需要解压,工具支持压缩镜像,再找一个class10的8G以上的TF(SD)卡,使用usb读卡器插入主机上,选择该SD卡,系统会自动格式化,然后点烧写即可,非常简单。
烧写约30分钟,自动校验无问题,则提示烧写完成。
此时,windows系统可以打开该SD卡,查看SD卡内的文件显示如下:
如果看到以上文件,即表示SD卡系统烧写成功。
五、开发板上电启动
开发板上接好各个连线,鼠标,键盘,HDMIM显示器,网线,然后准备一个12V,3A的电源,使用5.2mm的同心电源插口,给开发板供电,插入上面准备好带有系统的SD卡。
插入电源后,课件到电源指示LED亮起,几秒后系统运行指示LED亮起,说明开发板运行正常。
第一次启动系统需要做一些初始化,系统会重启几次,并且从网络下载一些文件。此时连接HDMI的显示器不会显示显示什么画面,当系统自动重启几次后,在显示器上看到进入到用户登录界面,即系统默认的Ubuntu22的桌面图像:
系统登录用户名 ubuntu , 密码 ubuntu , 首次登录时,要求修改密码。
六、查看主机系统信息
串口连接正常后,就可以先查看一下主机信息和CPU,内存,文件系统的信息,显示如下:
进入系统后,显示的shell输出信息:
CPU 信息cat /proc/cpuinfo
内存硬件信息: cat /proc/meminfo
文件系统挂载信息:
df–h
然后查看网络信息,如下:
七、以太网络通讯测试
系统使用了动态分配的IP地址 ,而且重启后发现这个地址还不会经常变动,可以使用该IP地址来与该开发板通讯。使用ping网关和互联网主机如下图:
说明开发板与局域网连接成功。
八、使用SSH远程登录
在连接好网线,测试号板子的以太网络后,就可以建立SSH的远程登录功能了,这也是为后续开发传输文件等必不可少的方式。这里使用SecureCRT8.7.1 版本软件,低于此版的会登录不成功。
建立SSH连接,使用用户名ubuntu,密码ubuntu,就可以直接就登录进入了开发板了。
至此,成功的建立了串口和有线网络连接PC主机的通道。可以通过网络登录板子进行命令操作,也可以上传文件。
需要注意的是,SSH用户名不能使用root,在SSH进入系统后可以通过su提权的方式使用root账号。
到此就建立好开发板的基本工作环境,可以进行下一步的开发测试相关工作了。
九、编译测试C/C++程序
为了后续的测试使用,需要检查一下板上的开发环境,经过测试,发现板上系统带有gcc的编译器和python执行器,意味着一些简单的开发可以在板上进行,那么这里就先测试一下开发板上的编译环境,先测试一个简单的hello,world的c程序:
写一个hello测试程序:
再写一个Makefile
然后编译,运行,结果如下图:
可见输出了正确的结果,说明板上的开发环境与编译器工作正常。而且可以看出程序是aarch64 的处理器指令架构。
再写一个C++代码,使用bbp 算法计算1000位圆周率的代码,如下:
- #include
- #include
- #include
- #include
- using namespace std;
- double bbp(int n,int k,int l)
- {
- int i;
- long b=1;
- double c=1;
- if(n>k)
- {
- for(i=n-k;i!=0;i--)
- b=(b*16+0)%(8*k+l);
- return(((double)b)/((double)(8*k+l)));
- }
- else
- if(n==k)
- return(((double)1)/((double)(8*k+l)));
- else
- {
- for(i=0;i<(k-n);i++)
- c=c/16;
- return(c/(8*k+l));
- }
- };
- void pi(int m,int n,int p[])
- {
- double a=0;
- int k=0;
- while(k<(n+8))
- {
- a+=4+4*bbp(n,k,1)-2*bbp(n,k,4)-bbp(n,k,5)-bbp(n,k,6);
- a=a-(int)a;
- k++;
- }
- for(k=0;k=0;i--)
- {
- a=a+b+j;
- if(a>=10000)
- {
- a-=10000;
- j=1;
- }
- else
- j=0;
- }
- }
- void pi_calc()
- {
- int i,j,p[1100]={0},r[300]={0};
- short q[4000];
- for(i=0;i<125;i++)
- pi(8,i*8,p+i*8);
- for(i=0;i<1000;i++)
- {
- j=p;
- q[i*4+3]=j%2;
- j=j/2;
- q[i*4+2]=j%2;
- j=j/2;
- q[i*4+1]=j%2;
- j=j/2;
- q[i*4+0]=j%2;
- p=0;
- }
- p[0]=10000;
- for(i=0;i<4000;i++)
- {
- div(p);
- if(q)
- add(r,p);
- }
- //cout<<3<<\\\" \\\";//
- printf(\\\"3.\\\");
- for(i=0;i<250;i++)
- printf(\\\"%04d\\\", r);
- for(i=0;i<0;i++)
- {
- if(r<10)
- cout<<\\\"000\\\";
- else
- if(r<100)
- cout<<\\\"00\\\";
- else
- if(r<1000)
- cout<<\\\"0\\\";
- cout<
复制代码
桌面应用
|