嵌入式ARM端测试手册——全志T3+Logos FPGA开发板(上)
前 言
本指导文档适用开发环境:
Windows开发环境:Windows 7 64bit、Windows 10 64bit
Linux开发环境:Ubuntu18.04.4 64bit
虚拟机:VMware15.5.5
进行本文档操作前,请先按照调试工具安装、Linux开发环境搭建相关文档,安装SecureCRT串口调试终端、VMware虚拟机等相关软件。
本文档主要提供开发板的硬件资源测试方法。无特殊说明情况下,默认使用USB TO UART0作为调试串口,使用Linux系统启动卡(Micro SD方式)启动系统,通过路由器与PC机进行网络连接。
本文测试板卡为创龙科技TLT3F-EVM开发板,它是一款基于全志科技T3四核ARM Cortex-A7 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核国产工业开发板,ARM Cortex-A7处理器单元主频高达1.2GHz。评估板由核心板和评估底板组成,核心板CPU、FPGA、ROM、RAM、电源、晶振、连接器等所有器件均采用国产工业级方案,国产化率100%。同时,评估底板大部分元器件亦采用国产工业级方案。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。
评估板接口资源丰富,引出三路网口、三路USB、双路CAN、双路RS485等通信接口,板载Bluetooth、WIFI、4G(选配)模块,同时引出LVDS LCD、TFT LCD、MIPI LCD、CVBS OUT、LINE IN、H/P OUT等音视频多媒体接口,支持双屏异显、Mali400 MP2 GPU、1080P@45fps H.264视频硬件编解码,并支持SATA大容量存储接口,方便用户快速进行产品方案评估与技术预研。
系统启动测试
接入电源,并使用Type-C线连接PC机和评估板的USB TO UART0调试串口。打开设备管理器,确认评估板USB TO UART0调试串口对应的COM端口号。
打开串口调试终端SecureCRT,选择对应的COM端口号,设置波特率为115200,8N1,无校验位。建立串口连接,如下图所示。
将Linux系统启动卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为0(并非拨码开关上文字),此档位将优先从Linux系统启动卡中启动系统。将评估板上电启动,系统将会自动登录root用户,串口终端会打印如下类似启动信息。
备注:由于我司提供的Linux系统保留了部分官方驱动配置,且实际未使用到相关驱动的部分功能,因此在内核启动过程中,驱动会打印"OF: no ranges;cannot translate"、"failed to get normal led pin assign"等类似警告信息。此类警告信息不会影响系统的正常运行,请忽略即可。
核心板LED在系统启动过程中的变化说明如下:
评估板上电后,电源指示灯LED0点亮;随后U-Boot第一阶段启动,LED1点亮;紧接着U-Boot第二阶段启动,LED2点亮;直至内核启动运行时,LED2熄灭,LED1进行心跳闪烁;eMMC进行读写时,LED2闪烁。
文件传送测试
PC机和评估板之间传送文件的常见方式如下:
- 通过Linux系统启动卡、U盘等存储介质方式拷贝。
- 通过NFS、TFTP、OpenSSH等网络方式拷贝。
通过Linux系统启动卡
将配套的系统启动卡通过读卡器插至PC机挂载至虚拟机Ubuntu系统,如下图,查询系统启动卡设备节点,其中"/dev/sdb7"为Linux系统启动卡文件系统分区,具体以实际名称为准。
执行如下命令,将"/dev/sdb7"设备节点挂载至"/mnt/"目录下。
Host# sudo mount /dev/sdb7 /mnt
Host# ls /mnt/
执行如下命令在Ubuntu中新建文件test0,将test0文件拷贝至评估板文件系统root目录。
Host# touch test0
Host# sudo cp test0 /mnt/root/
文件拷贝完成后,请执行如下命令卸载设备,并拔出读卡器,从中取出Linux系统启动卡。
Host# sudo umount /dev/sdb7
将Linux系统启动卡插至评估板Micro SD卡槽,评估板上电启动即可查看root目录下的文件。
Target# ls
通过OpenSSH
OpenSSH是SSH(Secure Shell)协议的免费开源实现。SSH协议族可用来进行远程控制,或在计算机之间传送文件,评估板文件系统默认已支持SSH库。
在Ubuntu中执行如下命令,查询是否已安装OpenSSH。
Host# ssh -v
可看到系统已自带OpenSSH。如未安装,请先自行正确安装OpenSSH。
将评估板ETH0 RGMII网口通过网线连接至路由器。在评估板上执行如下命令可自动获取到IP,如下图所示。"-i"用于指定网卡,eth0为网卡名字,请根据实际情况修改。
Target# udhcpc -i eth0
执行如下命令可查询IP地址。本次查询到的IP地址是192.168.0.87。
Target# ifconfig
使用OpenSSH从PC机传送文件至评估板
执行如下命令在Ubuntu中新建文件test1,并使用OpenSSH命令将test1文件拷贝至评估板文件系统根目录。
Host# touch test1 //新建文件
Host# scp test1 root@192.168.0.87:/
如出现提示"Are you sure you want to continue connecting (yes/no)?",请输入:yes。
在评估板上执行如下命令可看到从PC机拷贝过来的文件,如下图所示。
Target# ls /
- 使用OpenSSH从评估板传送文件至PC机
执行如下命令在评估板文件系统根目录新建一个测试文件test2。
Target# cd /
Target# touch test2 //新建文件
在Ubuntu上执行如下OpenSSH命令将评估板测试文件test2拷贝至PC机"/home/tronlong/"目录下。如传输的是文件夹,请在scp后面添加参数"-r"。
Host# sudo scp root@192.168.0.87:/test2 /home/tronlong/
Host# ls
- 使用OpenSSH登录到评估板文件系统
在Ubuntu执行如下命令可通过OpenSSH登录评估板文件系统。
Host# sudo ssh root@192.168.0.87
如需退出登录,请执行exit或者logout命令。
LED测试
评估底板LED1、LED2与GPIO对应关系如下表所示,系统启动后默认点亮。
表 1
LED1 |
LED2 |
PB4 |
PB10 |
进入评估板文件系统,执行如下命令逐盏熄灭、点亮LED。
Target# echo 0 > /sys/class/leds/user-led0/brightness //控制LED1灭
Target# echo 1 > /sys/class/leds/user-led0/brightness //控制LED1亮
Target# echo 0 > /sys/class/leds/user-led1/brightness //控制LED2灭
Target# echo 1 > /sys/class/leds/user-led1/brightness //控制LED2亮
按键测试
评估底板包含3个用户按键:USER0(KEY3)、USER1(KEY4)、USER2(KEY5)。进入评估板文件系统,执行如下命令查看用户按键对应的事件号。其中USER0(KEY3)和USER1(KEY4)对应的按键事件号为event1,USER2(KEY5)对应的按键事件号为event5。
Target# cat /proc/bus/input/devices
执行如下命令,分别按下USER0(KEY3)和USER1(KEY4)进行按键测试,可看到如下打印信息,其中"0094"表示USER0(KEY3),"0095"表示USER1(KEY4),按"Ctrl + C"可终止测试命令。
Target# od -x /dev/input/event1
执行如下命令,按下USER2(KEY5)进行按键测试,可看到如下打印信息,"00ca"表示USER2(KEY5),按"Ctrl + C"可终止测试命令。
Target# od -x /dev/input/event5
时钟设置测试
Linux系统中分系统时钟(软件时钟)和RTC时钟(硬件时钟),系统时钟掉电即会消失,RTC时钟在安装电池的情况下会长期运行。
如需使用外部RTC时钟,请先安装RTC电池。如下为时钟相关的常用命令。
查看系统时钟
Target# date
查看RTC时钟
Target# hwclock -u
设置系统时间
Target# date -s "2023-01-01 8:30:00" //设置时间:2023年1月1日8点30分00秒
Target# date
同步系统时钟至RTC时钟
Target# hwclock --systohc -u
Target# hwclock -u
同步系统和RTC的时钟
执行指令后,系统会同步RTC时钟作为系统时钟。
Target# hwclock --hctosys -u
DDR读写测试
DDR读写速度受实际情况影响,测试速率以具体情况为准,如下测试数据仅供参考。
DDR读速度测试
进入评估板系统,执行如下命令对DDR进行读速度测试。
Target# bw_mem 100M rd
测试从DDR中读取100MByte数据,可看到本次测试的读速度为1205.46MB/s。
DDR写速度测试
进入评估板系统,执行如下命令对DDR进行写速度测试。
Target# bw_mem 100M wr
测试写入100MByte数据至DDR中,可看到本次测试的写速度为560.64MB/s。
DDR拷贝速度测试
进入评估板系统,执行如下命令对DDR进行拷贝速度测试。
Target# bw_mem 100M cp
测试拷贝100MByte数据至DDR中,可看到本次测试的拷贝速度为281.57MB/s。
Micro SD接口读写测试
本小节使用SanDisk品牌、128GByte容量的Micro SD卡来测试评估板Micro SD接口性能。请参考《Linux系统启动卡制作及系统固化》文档将其制作成Linux系统启动卡再进行测试。不同的Micro SD卡以及不同的测试方法,对Micro SD接口测试结果将造成一定差异。
请先取出Linux系统启动卡,根据底板丝印将启动方式选择拨码开关拨为0,将评估板上电,系统将从eMMC启动,再将Linux系统启动卡插入评估板Micro SD卡槽。进入评估板文件系统执行如下命令查看Micro SD卡信息。
Target# fdisk -l
Micro SD接口写速度测试
进入评估板系统,执行如下命令测试Micro SD接口写速度。
Target# echo 3 > /proc/sys/vm/drop_caches
Target# mkdir -p /run/media/mmcblk1p7
Target# mount /dev/mmcblk1p7 /run/media/mmcblk1p7
Target# time dd if=/dev/zero of=/run/media/mmcblk1p7/test bs=1024K count=500
time命令有计时作用,dd用于复制,从if(input file)文件读出,写到of(output file)指定的文件,bs是每次写块的大小,count是读写块的数量。
"if=/dev/zero"不产生IO,即不断输出数据,可用来测试纯写速度。
此处一共写500MByte测试数据至Micro SD卡的test文件,可看到本次测试的Micro SD接口写速度约为:500MB/28.169s = 17.733MB/s。
Micro SD接口读速度测试
执行如下命令测试Micro SD接口读速度。
Target# echo 3 > /proc/sys/vm/drop_caches
Target# time dd if=/run/media/mmcblk1p7/test of=/dev/null bs=1024K
"of=/dev/null"不产生IO,即不断接收数据,可用来测试纯读速度。
此处从test文件一共读出500MByte的数据,可看到本次测试的Micro SD接口读速度约为:500MB/27.727s = 18.032MB/s。
eMMC读写测试
将Linux系统启动卡插入评估板Micro SD卡槽,评估板上电启动完成后,执行如下命令查看信息。
Target# fdisk -l
eMMC写速度测试
执行如下命令对eMMC设备进行写速度测试。
Target# echo 3 > /proc/sys/vm/drop_caches
Target# mkdir -p /run/media/mmcblk0p7
Target# mount /dev/mmcblk0p7 /run/media/mmcblk0p7
Target# time dd if=/dev/zero of=/run/media/mmcblk0p7/test bs=1024K count=500
此处一共写500MByte测试数据至eMMC设备,可看到本次测试的eMMC设备写速度约为500MB/12.301s = 40.647MB/s。
(2)eMMC读速度测试
执行如下命令对eMMC设备进行读速度测试。
Target# echo 3 > /proc/sys/vm/drop_caches
Target# time dd if=/run/media/mmcblk0p7/test of=/dev/null bs=1024K
此处从eMMC设备中一共读出500MByte数据,可看到本次测试的eMMC设备读速度约为500MB/12.617 = 39.629MB/s。
SPI FLASH读写测试
本小节对SPI FLASH的MTD0分区进行读写速度测试。SPI FLASH由ARM端和FPGA端共同控制,因此在测试之前,需停止FPGA端控制,并配置SPI总线工作模式,使SPI与SPI FLASH通信。
执行如下命令,停止FPGA端控制,然后安装SPI FLASH驱动。
Target# echo 68 > /sys/class/gpio/export
Target# echo out > /sys/class/gpio/gpio68/direction
Target# echo 0 > /sys/class/gpio/gpio68/value //停止FPGA的控制
Target# echo 69 > /sys/class/gpio/export
Target# echo out > /sys/class/gpio/gpio69/direction
Target# echo 1 > /sys/class/gpio/gpio69/value //使能SPI与SPI FLASH通信
Target# depmod -a
Target# modprobe m25p80
执行如下命令,查看FLASH分区如下图所示。
Target# cat /proc/mtd
执行如下命令,拷贝文件至该分区,测试分区功能是否正常。
Target# time dd if=/CameraUI of=/dev/mtd0
SPI FLASH写速度测试
进入评估板系统,执行如下命令对SPI FLASH进行写速度测试。
Target# time dd if=/dev/zero of=/dev/mtd0 bs=1024K count=8
测试写入8MByte数据至SPI FLASH的MTD0分区下,可看到本次测试的SPI FLASH写速度约为:8MByte/19.248s = 0.415MB/s。
SPI FLASH读速度测试
重启评估板,进入评估板系统,执行如下命令对SPI FLASH进行读速度测试。
Target# time dd if=/dev/mtd0 of=/dev/null bs=1024K
测试从SPI FLASH的MTD0分区读取8MByte数据,可看到本次测试的SPI FLASH读速度约为:8MByte/1.382s = 5.788MB/s。
SATA接口测试
本章节使用三星品牌、120GByte容量的SATA接口SSD固态硬盘(以下简称“SATA硬盘”)并划分一个FAT32格式20GByte容量的分区测试SATA接口。请将SATA硬盘通过数据线连接至评估底板SATA接口。
进入评估板文件系统,执行如下命令可查询到SATA硬盘设备节点为sda1,容量为20GByte。挂载多个存储设备时,挂载名可能会变更,请以实际查询为准。
Target# fdisk -l
Target# df -h
写速度测试
执行如下命令,测试SATA接口写速度。
Target# echo 3 > /proc/sys/vm/drop_caches
Target# time dd if=/dev/zero of=/mnt/usb/sda1/test bs=1024K count=1000
此处一共写1000MByte测试数据至SATA硬盘,可看到本次测试的SATA接口写速度约为1000MB/30.119s = 33.201MB/s。
读速度测试
执行如下命令,测试SATA接口读速度。
Target# echo 3 > /proc/sys/vm/drop_caches
Target# time dd if=/mnt/usb/sda1/test of=/dev/null bs=1024K
此处从SATA硬盘中一共读出1000MByte的数据,可看到本次测试的SATA接口读速度为1000MB/5.326s = 187.758MB/s。
USB接口读写测试
USB HOST模式测试
本章节进行USB HOST模式读写测试,使用SanDisk品牌、FAT32格式、16GByte容量的U盘,支持USB3.0/2.0。不同品牌、格式或容量的U盘,测试结果会有所差别。
请通过Type-C转接头将U盘与评估板USB0 OTG接口连接,或直接将U盘与评估板USB1 HOST(双层)任意一个HOST接口连接。如下测试以USB1 HOST接口为例,其余接口方法一致,将U盘插至评估板USB1 HOST接口后,出现如下打印信息,可以从中看到U盘大小、挂载名等,如下图所示。出现如下信息说明正确识别到设备。
执行如下命令可查询挂载路径。挂载名和挂载路径请以实际查询为准,如下图所示。
Target# df -h
备注:USB0 OTG默认是DEVICE模式,测试USB HOST模式时,需将USB0 OTG修改为USB HOST模式。请执行如下命令,修改adb.sh文件,在文件最后一行添加内容"cat /sys/bus/platform/devices/usbc0.2/usb_host"。
Target# vim /adb.sh
写速度测试
执行如下命令,测试USB接口写速度。
Target# echo 3 > /proc/sys/vm/drop_caches
Target# time dd if=/dev/zero of=/mnt/usb/sda1/test bs=1024K count=200
此处一共写200MByte测试数据至U盘,可看到本次测试的USB接口写速度约为:200MB/15.218s = 13.142MB/s。
读速度测试
执行如下命令,测试USB接口读速度。
Target# echo 3 > /proc/sys/vm/drop_caches
Target# time dd if=/mnt/usb/sda1/test of=/dev/null bs=1024K
此处从USB接口读取200MByte数据,可看到本次测试的USB接口读速度约为200MB/12.617s = 15.851MB/s。
USB DEVICE模式测试
本小节测试仅支持USB0 OTG接口,USB0 OTG默认是DEVICE模式,请通过Type-C线将PC机与评估板的USB0 OTG(CON17)接口进行连接。
执行如下指令,将系统boot-resource分区(mmcblk1p2)虚拟化为U盘,PC机将识别该U盘。
Target# echo /dev/mmcblk1p2 > /sys/class/android_usb/f_mass_storage/lun/file
Target# cat /sys/bus/platform/devices/usbc0.2/otg_role //查看当前USB模式
将U盘中的图片bootlogo.bmp拷贝至PC机中,在PC机查看图片是否正常显示,接着再把图片从电脑拷贝至U盘。
PC机可正常识别boot-resource分区虚拟化的U盘,并能正常查看boot-resource分区文件与正常读写,说明USB DEVICE功能正常。
串口测试
TTL UART6、TTL UART7串口
使用TTL转Micro USB模块,将评估板的TTL UART6(CON7)或TTL UART7(CON8)串口连接至PC机的USB接口。本小节以TTL UART6(CON7)串口为例(设备节点为:ttyS6)进行演示。如需测试TTL UART7(CON8)串口,请将设备节点修改为ttyS7。
打开设备管理器,本次测试中调试串口USB TO UART0端口号为COM9,TTL UART6串口的端口号为COM4,如下图所示。
打开串口调试终端,COM4、COM9波特率设为115200,8N1,无校验位,并建立串口连接,如下图所示。
发送测试
进入评估板文件系统,执行如下命令,设置TTL UART6串口。
Target# stty -F /dev/ttyS6 ispeed 115200 ospeed 115200 cs8 //设置串口波特率
Target# echo tronlong > /dev/ttyS6
接收测试
执行如下命令,由调试串口向TTL UART6串口发送数据,TTL UART6串口对应的串口调试终端将显示接收到的数据,按"Ctrl + C"可终止测试命令。
Target# cat /dev/ttyS6 //等待接收UART6串口数据
RS232 UART3串口
使用RS232交叉串口母母线、USB转RS232公头串口线,将评估板的RS232 UART3串口连接至PC机的USB接口。
打开设备管理器,本次测试中调试串口USB TO UART0端口号为COM9,RS232 UART3串口的端口号为COM12,如下图所示。
打开串口调试终端,COM9、COM12波特率设为115200,8N1,无校验位,并建立串口连接,如下图所示。
发送测试
进入评估板文件系统,执行如下命令,由调试串口向RS232 UART3串口发送数据,RS232 UART3串口对应的串口调试终端将显示接收到的数据。
Target# stty -F /dev/ttyS3 ispeed 115200 ospeed 115200 cs8 //设置串口波特率
Target# echo tronlong > /dev/ttyS3
接收测试
执行如下命令,并在RS232 UART3串口输入数据,调试串口对应的串口调试终端将显示接收到的数据,按"Ctrl + C"可终止测试命令。
Target# cat /dev/ttyS3 //等待接收RS232 UART3串口数据
RS485 UART4、RS485 UART5串口
使用RS232转RS485模块、USB转RS232公头串口线,将评估板的RS485 UART4或RS485 UART5串口连接至PC机的USB接口。
RS232转RS485模块与评估板RS485串口连接方法如下:
- RS232转RS485模块485+端子,连接评估板RS485串口A端子。
- RS232转RS485模块485-端子,连接评估板RS485串口B端子。
- RS232转RS485模块GND端子,连接评估板RS485串口GND1端子。
本章节以RS485 UART4串口(设备节点为:ttyS4)为例进行演示。如需测试RS485 UART5串口,请将设备节点修改为ttyS5。
打开设备管理器,本次测试中调试串口USB TO UART0端口号为COM9,RS485 UART4串口的端口号为COM12,如下图所示。
打开串口调试终端,COM9、COM12波特率设为115200,8N1,无校验位,并建立串口连接,如下图所示。
发送测试
进入评估板文件系统,执行如下命令进行调试串口与RS485 UART4串口互发数据。RS485 UART4串口测试步骤、现象与RS232串口类似。
Target# stty -F /dev/ttyS4 ispeed 115200 ospeed 115200 cs8 //设置波特率
Target# echo tronlong > /dev/ttyS4 //向RS485 UART4串口发送数据
接收测试
执行如下命令,并在RS458 UART4串口输入数据,调试串口对应的串口调试终端将显示接收到的数据,按"Ctrl + C"可终止测试命令。
Target# cat /dev/ttyS4 //等待接收RS485 UART4串口数据