本帖最后由 正点原子运营 于 2021-6-1 17:53 编辑
1)实验平台:正点原子STM32MP157开发板
2) 章节摘自【正点原子】《STM32MP157快速体验》
3)购买链接:https://item.taobao.com/item.htm?&id=629270721801
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/arm-linux/zdyzmp157.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)正点原子STM32MP157技术交流群:691905614
第四章ATK-STM32MP157功能测试
4.1 LED测试、蜂鸣器测试
正点原子ATK-STM32MP157开发板上有配备两个LED,一个蜂鸣器。它们在底板原理图对应硬件管脚的关系如下表。在出厂系统里,我们把LED0作为心跳灯,一般用于指示系统是否正常运行,LED1作为用户LED。
我们可以在内核源码设备树里配置设备是否启用LED。内核源码路径为arch/arm/boot/dts/stm32mp157d-atk.dtsi。
leds { compatible = "gpio-leds";
led1 { label = "sys-led"; gpios = <&gpioi 0 GPIO_ACTIVE_LOW>; linux,default-trigger = "heartbeat"; default-state = "on"; status = "okay"; };
led2 { label = "user-led"; gpios = <&gpiof 3 GPIO_ACTIVE_LOW>; linux,default-trigger = "none"; default-state = "on"; status = "okay"; };
beep { label = "beep"; gpios = <&gpioc 7 GPIO_ACTIVE_LOW>; default-state = "off"; }; };
测试:
在出厂文件系统里,我们可以通过如下指令来控制LED和蜂鸣器的状态。输入后查看开发板上的LED的状态。
cat /sys/class/leds/sys-led/trigger //查看LED0的当前触发方式及支持的触发方式 echo none > /sys/class/leds/sys-led/trigger //改变LED0的触发模式 echo 1 > /sys/class/leds/sys-led/brightness //点亮LED0 echo 0 > /sys/class/leds/sys-led/brightness //熄灭LED0 echo none > /sys/class/leds/user-led/trigger //改变LED1的触发模式 echo 1 > /sys/class/leds/user-led/brightness //点亮LED1 echo 0 > /sys/class/leds/user-led/brightness //熄灭LED1 echo 1 > /sys/class/leds/beep/brightness //打开蜂鸣器 echo 0 > /sys/class/leds/beep/brightness //关闭蜂鸣器 echo heartbeat > /sys/class/leds/beep/trigger //改变蜂鸣器的触发模式,设置为心跳方式 echo none > /sys/class/leds/beep/trigger //改变蜂鸣器的触发模式,设置为none方式 echo 0 > /sys/class/leds/beep/brightness //关闭蜂鸣器
4.2 按键测试
正点原子STMMP157开发板上有配备两个用户按键。它们在底板原理图对应的关系如下。
我们可以在内核源码里配置设备是否启用按键。内核源码路径为arch/arm/boot/dts/stm32mp157d-atk.dtsi。
gpio-keys { compatible = "gpio-keys"; autorepeat; key0 { label = "USER-KEY0"; linux,code = <114>; gpios = <&gpiog 3 GPIO_ACTIVE_LOW>; gpio-key,wakeup; };
key1 { label = "USER-KEY1"; linux,code = <115>; gpios = <&gpioh 7 GPIO_ACTIVE_LOW>; gpio-key,wakeup; }; }; 测试:
在文件系统输入下面指令查看输入事件对应的设备
lsinput
图4.2 1 按键事件
在上图我们可以知道event2为按键的输入事件,通过上面我们还发现event0为触摸屏(ft5x06触摸芯片)的事件,所以event2不一定是按键的事件,这与用户板子上的设备有关!所以我们要使用lsinput来查看输入事件。
我们使用od -x 或者hexdump指令来查看按键的输入信息。按下KEY0或者KEY1有如下信息出现,说明按键正常。按Ctrl+c终止指令。
- od -x /dev/input/event2
- hexdump /dev/input/event2
复制代码
图4.2 2 打印的按键事件
4.3 LCD测试
在出厂系统里,因为正点原子的屏幕rgb数据线上的最高位有ID,所以出厂系统会识别屏的分辨率。才加载相应的触摸驱动。正点原子所使用的RGB屏幕有5种,如下表:
屏幕尺寸 触摸芯片 屏幕ID
4.3寸屏(480x272) gt9xx 0x00
4.3寸屏(800x480) gt9xx/gt1151 0x04
7寸屏(800x480) ft5x06 0x01
7寸屏(1024x600) ft5x06 0x02
10寸屏(1280x800) gt9xx 0x03
4.3.1触摸测试
内核源码触摸驱动路径为drivers/input/touchscreen/。设备树文件arch/arm/boot/dts/stm32mp157d-atk.dts配置如下:&i2c2 { ft5x06: ft5x06@38 { compatible = "edt,edt-ft5206"; reg = <0x38>; interrupts = <1 IRQ_TYPE_EDGE_FALLING>; interrupt-parent = <&gpioi>; interrupt-controller; reset-gpios = <&gpioh 15 GPIO_ACTIVE_LOW>; status = "okay"; };
gt9147: gt9147@5d { compatible = "goodix,gt9147", "goodix,gt1151"; reg = <0x14>; interrupt-parent = <&gpioi>; interrupts = <1 IRQ_TYPE_EDGE_RISING>; irq-gpios = <&gpioi 1 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpioh 15 GPIO_ACTIVE_HIGH>; status = "okay"; }; };
开发板启动后我们使用lsinput指令查看触摸屏对应的触摸事件,与4.2小节一样的方法也可以测试屏幕是否正常触摸。
先停止出厂的默认的Qt桌面界面,输入下面指令停止。不能点击Qt桌面界面的退出,因为Qt桌面界面配置为了systemd服务,必须停止该服务,否则Qt桌面会重启。Tslib是基于linuxfb显示的,在正点原子STM32MP157出厂系统里,配置了fb0与dri接口。
systemctl stop atk-qtdesktop-linuxfb // 停止服务 psplash-drm-quit // 关闭drm显示,防止psplash占用LCD export TSLIB_CONSOLEDEVICE=none // 设置终端控制台为NULL ts_test
图4.2 3 打印触摸坐标
4.3.2背光测试
LCD 屏幕的背光支持 8个等级的pwm调节,亮度级数为 0~7,默认为7。数值越大,屏幕越亮。
cat /sys/class/backlight/panel-backlight/max_brightness //查看lcd最大亮度等级
cat /sys/class/backlight/panel-backlight/brightness //查看当前亮度等级
echo 4 > /sys/class/backlight/panel-backlight/brightness//修改当前亮度等级观察屏的亮度变化
cat /sys/class/backlight/panel-backlight/brightness //再查看当前亮度等级
4.4 串口测试
ATK-STM32MP157底板上串口有以下几组,不包括引出的IO。
串口类型 对应的串口 设备名
com2(DB9公头)/RS485 usart3 ttySTM1
com1(DB9母头) uart5 ttySTM2
USB_TTL uart4 ttySTM0
由于USB_TTL是我们的调试串口,我们在开发板启动时能正常打印和输入信息,说明这个串口是可以正常工作的,就可以不用再测试了。
4.4.1 DB9串口测试
从上表可以知道,我们的DB9类型串口有两个,分别是com2(母头)和com1(公头),所以用户需要准备USB转RS232公头串口线,和USB转232母头串口线。如下图,
图4.4.1 1 USB转RS232母头
图4.4.1 2 USB转RS232公头
4.4.1.1DB9公头(com2)测试
在4.4小节可以知道DB9公头(com2)硬件连接是接在usart3处,由于DB9公头的tx和rx与RS485的tx和rx可通过跳线帽接在usart3处,所以我们测试前需要通过跳线帽去切换连接,如下图图4.4.1 3。将DB9公头com2的tx和rx分别接到usart3处的rx和tx处。再用USB转232母头接到开发板com2处。如下图图4.4.1 3。
图4.4.1 3底板DB9公头(com2)接口接USB转母头RS232
通过下面的指令配置串口
stty -F /dev/ttySTM1 ispeed 115200 ospeed 115200 cs8
stty指令解释:
(1)-F(--file):打开指定的设备,并用此设备作为输入来代替标准输入
(2)ispeed N:设置输入速率为N
(3)ospeed N: 设置输出速率为N
(4)csN:把字符长度设为N
更多关于该指令用法请输入stty -help查看
输入如下指令等待上位机发来的数据,注意不要发中文,否则可能会乱码。按Ctrl+c结束接收。
cat /dev/ttySTM1
图4.4.1.1 1 等待串口发来的数据
同时在上位机上也会返回发送的数据,注意使用cat这种方法只能简单测试串口的功能,不代表实际项目上测试。推荐使用minicom测试,这里就不介绍minicom的使用了,在正点原子IMX6U驱动开发指南里第63.6.2小节已经讲过,推荐找这章节的内容看。
4.4.1.2DB9母头(com1)测试
在4.4小节可以知道DB9母头(com1)硬件连接是接在uart5处,由于DB9母头的tx和rx与ATK MODULE的tx和rx可通过跳线帽接在uart5处,所以我们测试前需要通过跳线帽去切换连接,如下图。将DB9母头com1的tx和rx分别接到uart5处的rx和tx处。再用USB转232公头接到开发板com1处。如下图。
图4.4.1.2 1底板DB9母头(com1)接USB转RS232公头
通过下面的指令配置串口
stty -F /dev/ttySTM2 ispeed 115200 ospeed 115200 cs8
余下的测试与4.4.1.1小节一样,不再重复叙述。
4.4.2 RS485串口测试
在4.4.1.1小节我们可以知道,com2与RS485可以通过跳线帽切换连接到usart3。测试前我们先切换跳线帽,连接RS485到usart3。在这里我们需要借助正点原子USB转换器模块来测试,如果用户有485相关测试工具可以自行测试,不一定要用这个模块。如下图。
图4.4.2 1 正点原子多合一USB转换器模块
将底板的RS485的A用杜邦线连接到正点原子USB转换器模块的A处,B连接到B。使用了正点原子的USB转换器模块,会在PC(电脑端)看到一个串口。测试方法按4.4.1.1小节步骤来测试即可,无需改动。
4.5 USB测试
4.5.1 USB HOST测试
将一张FAT32格式的U盘用读卡器,直接插在ATK-STM32MP157底板的USB_CN1或USB_CN2或USB_CN3的USB接口上,如下图。
图4.5.1 1 U盘挂载的信息
我们可以直接进入/run/media/sda1目录进入读写文件操作。
读速度测试:
hdparm -t /dev/sda1
图4.5.1 2 读取速度评测
写速度测试:
- time dd if=/dev/zero of=/run/media/sda1/test bs=1024k count=100 conv=fdatasync
- rm /run/media/sda1/test //写完后删除写入的文件
复制代码
图4.5.1 3 写速度评测
这里代表写入100MiB的文件,写入速度为11.2 MB/s。实际上写入的文件越大求平均写入速度越接近实际值。
4.5.2 USB OTG测试(OTG网络)
ATK-STMMP157底板上USB-OTG接口,可当作USB网络使用(局域网)。
我们使用一根USB Type-C连接线连接USB_OTG接口到PC(电脑)。
图4.5.2 1 USB_OTG连接(PC)电脑
USB-OTG在系统启动后,USB-OTG会生成一个usb0网络节点。我们可以使用ifconfig指令查看。
图4.5.2 2 生成的usb0网络节点
打开Ubuntu虚拟机,按如下步骤操作,将PC(电脑)识别的可移动设备连接到虚拟机上。
图4.5.2 3 将USB_OTG设备连接到Ubuntu虚拟机
图4.5.2 4 查看开发板获取的USB_OTG网络ip地址
并且Ubuntu虚拟机上,生成一个网络节点。在Ubuntu使用ifconfig命令查看。并且是与ATK-STM32MP157相同一个网段的ip。所以它们构成了一个局域网,可以使用网络进行通信或者传输文件等操作!
图4.5.2 5 Ubuntu获取USB_OTG的ip地址
4.5.3 USB鼠标测试
在出厂系统启动后,插上鼠标,LCD屏幕或连接HDMI到显示屏,屏上会显示鼠标指针,即可用鼠标操作Qt界面。
4.6 网络测试
ATK-STMMP157核心板上搭载一颗千兆网络芯片,CPU只支持一路千兆网络,自适应10/100/1000M。
在文件系统使用如下指令测试网络,将网线插在网口处,确保网线能上网。
查看网络获取的IP
ifconfig
图4.5.2 6 eth0获取的ip地址
检查网络能否上网,如果有数据回复,则说明网络功能正常。按Ctrl+c终止指令。
ping www.baidu.com
图4.6 1 ping百度
测试是否为千兆网络,注意要使用千兆网线,千兆路由器或者千兆交换机,PC(电脑)网卡必须是千兆网卡,否则测试出来的速度或识别出来的速度可能是百兆的!
如下图,看到软件识别为1Gbps/Full代表是千兆网络。
图4.6 2 识别为千兆网络
使用iperf3指令可测试千兆网络的连接速度
设置Ubuntu为服务器
iperf3 -s
ATK-STM32MP157为客户端,通过iperf指令,输入服务器的ip即可
iperf3 -c 192.168.1.11 -i 1
解释:
(1)192.168.1.11: Ubuntu服务器的ip地址。
(2)-i:触发周期。
测试出来的Bitrate大概为800 Mbits/sec左右才是千兆网络速度(测试前请不要开启其他应用,以免影响测试速度),如果不是,请检查是否使用了千兆网线、PC电脑的网卡是不是千兆网卡,通过的路由器是不是千兆的等,不能有一个为百兆的设备,否则测试出来的是百兆网络。
4.7 CAN
ATK-STM32MP157底板上有一路CAN ,要想测试CAN,用户手上需要有测试CAN的仪器,(否则只能用两块不同的开发板的CAN或者其他CAN设备测试)比如周立功的CAN分析仪、创芯科技的CAN分析仪和广成科技的CAN分析仪等。或者可用两个CAN设备对接相互收发。关于CAN仪器及CAN上位机的使用,请参照各厂商的使用说明书,如不会使用请咨询CAN厂家的技术支持。
正点原子底板所使用的CAN的主要特性如下:
CAN FD可以理解成CAN协议的升级版,只升级了协议,物理层未改变。
CAN与CAN FD主要区别:传输速率不同、数据长度不同、帧格式不同、ID长度不同。
数据比特率最高5Mbps。
数据比特率理论最低40kbps。
测试前请使用CAN分析仪或者测试CAN的设备连接好ATK-STM32MP157底板的CAN,CANH接仪器的CANH,CANL接CAN仪器的CANL。
底板接口如下图位置
图4.7 1 CAN接口位置
4.7.1 CAN测试
经过测试CAN最低数据比特率10kBit/s(此款CAN芯片理论最低为40kbps),最高数据1000kBit/s。
ip link set can0 up type can bitrate 50000
使用cansend指令发送数据。
cansend can0 123#01.02.03.04.05.06.07.08
解释:
(1)can0设备
(2)123:帧ID
(3)01.02.03.04.05.06.07.08:帧数据
接收则可以使用candump指令来接收数据
candump -ta can0
解释:
(1)-ta: t代表打印时间,a代表开启ASCII输出
使用创芯科技CAN分析仪设置CAN的速率为50000做的实验结果如下图
图4.7.1 1使用上位机与开发板CAN收发
4.7.2 CAN FD测试
经过测试CAN FD的波特率最高为1000 kBit/s,数据波特率为5000 kBit/s。
可用的速率如下,如需要使用更低的波特率,请使用CAN,而非CAN FD。需要重新设置CAN FD速率,先关闭CAN,再设置CAN的速率,如果不成功请重启板子或者上位机软件。
ifconfig can0 down
配置CAN FD的速率,三选一,只需要选择下面其中一条指令来配置即可。
- ip link set can0 up type can bitrate 1000000 dbitrate 5000000 fd on
- ip link set can0 up type can bitrate 200000 dbitrate 1000000 fd on
- ip link set can0 up type can bitrate 100000 dbitrate 500000 fd on
图4.7.2 1 开发板设置CAN
CAN FD发送数据,下图为一行指令,建议分行复制。
cansend can0 123##300.11.22.33.44.55.66.77.88.99.aa.bb.cc.dd.ee.ff.00.11.22.33.44.55.66.77.88.99.aa.bb.cc.dd.ee.ff.00.11.22.33.44.55.66.77.88.99.aa.bb.cc.dd.ee.ff.00.11.22.33.44.55.66.77.88.99.aa.bb.cc.dd.ee.ff
解释:
(1)can0: can设备
(2)123: 帧ID
(3)3:标志(flags)
(4)00.11.22…: 帧数据
接收则可以使用candump指令来接收数据
candump -ta can0
解释:
(1)-ta: t代表打印时间,a代表开启ASCII输出
下面是使用广成科技的CAN FD分析仪使用波特率最高1000 kBit/s,数据波特率最高5000 kBit/s测试的结果。(上位机是广成科技V5.9.9版本的上位机软件(咨询广成科技技术获取最新上位机软件),注意上位机的使用及安装,请根据各厂家的CAN分析仪使用说明)
图4.7.2 2使用上位机与开发板CAN收发
4.8 RTC时钟测试
ATK-STMMP157底板上有RTC时钟芯片PCF8563,属于芯片外部RTC时钟。若需要提高时钟的精度,需要用高精度的晶振。
请检查开发板底板上是否有安装RTC纽扣电池。也可以用万用表检查RTC电池有没有电,测出来是3.3v左右才是正常的。防止因RTC电池没电不能保存时间。
Linux系统分两个时钟,一个是system time(软件时钟),一个是hardware clock(硬件时钟)。使用date和hwclock命令可分别查看和设定系统时间和硬件时间。系统时钟掉电即会消失,RTC 时钟在有电池的情况下会长期运行。系统时钟会在系统重启时与 RTC 时钟同步。
查看系统时钟,使用指令date。
date
设置当前系统时钟
date -s "2020-9-9 10:00:00"
查看系统时钟
date
使用hwclock写入硬件时钟
hwclock -w
查看硬件时钟,检查是否是上面hwclock -w所设置的时钟
hwclock
4.9 AP3216C测试
AP3216C简介:
ALPHA开发板上通过 I2C5 连接了一个三合一环境传感器:AP3216C,AP3216C 是由敦南可以推出的一款传感器,其支持环境光强度(ALS)、接近距离(PS)和红外线强度(IR)这三个环境参数检测。AP3216C 的特点如下:
①、I2C 接口,快速模式下波特率可以到 400Kbit/S
②、多种工作模式选择:ALS、PS+IR、ALS+PS+IR、PD 等等。
③、内建温度补偿电路。
④、宽工作温度范围(-30°C ~ +80°C)。
⑤、超小封装,4.1mm x 2.4mm x 1.35mm
⑥、环境光传感器具有 16 为分辨率。
⑦、接近传感器和红外传感器具有 10 为分辨率。
AP3216C 常被用于手机、平板、导航设备等,其内置的接近传感器可以用于检测是否有物
体接近,比如手机上用来检测耳朵是否接触听筒,如果检测到的话就表示正在打电话,手机就
会关闭手机屏幕以省电。也可以使用环境光传感器检测光照强度,可以实现自动背光亮度调节。
AP3216C元器件在ATK-STM32MP157底板位置如下
图4.9 1 AP3216C在开发板的位置
由正点原子提供驱动程序,源码路径为出厂源码drivers/char/ap3216c.c。设备树arch/arm/boot/dts/stm32mp157d-atk.dtsi配置如下:
- &i2c5 {
- pinctrl-names = "default", "sleep";
- pinctrl-0 = <&i2c5_pins_a>;
- pinctrl-1 = <&i2c5_pins_sleep_a>;
- i2c-scl-rising-time-ns = <100>;
- i2c-scl-falling-time-ns = <7>;
- status = "okay";
- /delete-property/dmas;
- /delete-property/dma-names;
- ap3216c@1e {
- compatible = "LiteOn,ap3216c";
- reg = <0x1e>;
- };
- …//此处省略其他设备配置
- };
进入开发板文件系统执行下面指令读取环境传感器的环境参数值,根据开发板所处环境不同,环境参数值不同,先用下面指令读取一次环境参数值,再用手接近AP3216C传感器(ATK-STM32MP157底板U6处(在TF卡旁边),再用指令读取相应的参数值,参数值会有比较大的变化。
读取环境光强度值(ALS)
cat /sys/class/misc/ap3216c/als
读取接近距离(PS)
cat /sys/class/misc/ap3216c/ps
读取红外线强度(IR)
cat /sys/class/misc/ap3216c/ir
图4.9 2 读取出来的数据
4.10 ICM20608测试
ICM-20608简介:
ICM-20608 是 InvenSense 出品的一款 6 轴 MEMS 传感器,包括 3 轴加速度和 3 轴陀螺仪。
ICM-20608 尺寸非常小,只有 3x3x0.75mm,采用 16P 的 LGA 封装。ICM-20608 内部有一个 512字节的 FIFO。陀螺仪的量程范围可以编程设置,可选择±250,±500,±1000 和±2000°/s,加速度的量程范围也可以编程设置,可选择±2g,±4g,±4g,±8g 和±16g。陀螺仪和加速度计都是 16 位的 ADC,并且支持 I2C 和 SPI 两种协议,使用 I2C 接口的话通信速度最高可以达到 400KHz,使用 SPI 接口的话通信速度最高可达到 8MHz。I.MX6U-ALPHA 开发板上的 ICM-20608 通过 SPI 接口和 I.MX6U 连接在一起。ICM-20608 特性如下:
①、陀螺仪支持 X,Y 和 Z 三轴输出,内部集成 16 位 ADC,测量范围可设置:±250,±
500,±1000 和±2000°/s。
②、加速度计支持 X,Y 和 Z 轴输出,内部集成 16 位 ADC,测量范围可设置:±2g,±4g,±4g,±8g 和±16g。
③、用户可编程中断。
④、内部包含 512 字节的 FIFO。
⑤、内部包含一个数字温度传感器。
⑥、耐 10000g 的冲击。
⑦、支持快速 I2C,速度可达 400KHz。
⑧、支持 SPI,速度可达 8MHz。
ICM20608元器件在ATK-STMMP157底板上的位置如下
图4.10 1 ICM20608在开发板的位置
ATK-STMMP157底板上使用 SPI1 接口连接了一个六轴传感器 ICM-20608,由正点原子提供linux驱动程序与用户测试程序。驱动路径为出厂源码/drivers/char/icm20608.c,设备树arch/arm/boot/dts/stm32mp157d-atk.dtsi配置如下:
- &spi1 {
- pinctrl-names = "default", "sleep";
- pinctrl-0 = <&spi1_pins_a>;
- pinctrl-1 = <&spi1_sleep_pins_a>;
- cs-gpio = <&gpioz 3 GPIO_ACTIVE_LOW>;
- status = "okay";
- spidev: icm20608@0 {
- compatible = "alientek,icm20608";
- #address-cells = <1>;
- #size-cells = <0>;
- reg = <0>; /* CS #0 */
- spi-max-frequency = <8000000>;
- };
- };
其中我们向出厂文件系统添加了用户测试程序icm20608App,放在了/usr/bin/目录下。所以我们可以在文件系统直接执行icm20608App来获取六轴传感器的数据。
执行下面指令安装驱动程序,防止驱动程序有可能没有装上(如果有做了修改禁止启动Qt桌面的操作,或者没带显示,Qt桌面就不会去加载icm20608驱动程序)
modprobe icm20608
执行指令获取六轴传感器的数据,按Ctrl + c停止
icm20608App /dev/icm20608
图4.10 2 读取ICM20608数据
4.11 音频测试
ATK-STM32MP157底板上搭载一颗高性能音频编解码芯片CS42L51。板载麦克风可录音,底板背面接了一个2欧8瓦的喇叭,方便用户播放音乐。
4.11.1 播放音频测试
使用系统指令aplay或者gst-play-1.0可以播放音频文件。执行下面的指令播放音频文件。用户也可以自己拷贝音频文件到文件系统下使用指令aplay或者gst-play-1.0 + 音频文件播放。插上耳机或者听底板上的喇叭有没有声音,注意:带耳机时先靠近耳朵,不要先带上,防止耳机音量过大,可能给您一个惊喜。
设置播放音量
- amixer -c STM32MP1DK cset name='PCM Playback Switch' 'on','on'
- amixer -c STM32MP1DK cset name='PCM Playback Volume' '63','63'
- amixer -c STM32MP1DK cset name='Analog Playback Volume' '204','204'
- amixer -c STM32MP1DK cset name='PCM channel mixer' 'L R'
播放系统自带音频
- aplay /usr/share/sounds/alsa/Front_Right.wav
4.11.2 录音测试
ATK-STM32MP157底板上有两个录音设备,一个是底板上的MIC,一个是耳机座子作MIC输入。注意耳机的旁边有个跳线帽,用于切换耳机MIC输入和底板上的MIC输入。MIC与PHONE相连是表示耳机的MIC输入,MIC与BOARD相连是代表底板上的MIC输入。
设置录音增益
- amixer -c STM32MP1DK cset name='PGA-ADC Mux Left' '3'
- amixer -c STM32MP1DK cset name='PGA-ADC Mux Right' '3'
- amixer -c STM32MP1DK cset name='Mic Boost Volume' '1','1'
录音,执行下面的指令
- arecord -r 44100 -f S16_LE -c 2 -d 10 -D hw:0,1 record.wav
指令解释:
(1)-f S16_LE:以 S16_LE格式采样
(2)-r 44100:采样率 44.1K
(3)-c 2:2 个声道
(4)-d 10:录音长度 10s
(5)record.wav:录音存生成的音频文件
(6)-D hw:0,1 指定硬件声卡,0是卡数,1是在设备数量
播放上面录制的音频文件,备注:生成的文件大小与用户设置的格式及录制的长度有关
aplay record.wav
4.12 DHT11测试
DHT11简介:
DHT11 是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。正点原子也提供了Linux下的驱动,方便大家测试与学习。程序仅供参考。
此实验需要准备DHT11模块,可在正点原子淘宝店或者其他渠道购买。
图4.12 1 DHT11模块
正点原子淘宝DHT11的技术参数如下:
工作电压范围:3.3V-5.5V
工作电流: 平均0.5mA
输出:单总线数字信号
测量范围:湿度 20~90%RH,温度 0~50℃
精度 :湿度±5%,温度±2℃
分辨率 :湿度 1%,温度 1℃
DHT11模块的管脚排列如下图,下图为正面视图,有孔的一面为正面。
图4.12 2 DHT11正视图与底视图
ATK-STM32MP157底板上JP9处,也就是拨码开关旁边,留出了一个单排圆孔母座4Pin的座子。可用于连接DHT11或者DS18B20。按JP9处丝印可知道如何把DHT11插到JP9上(传感器有正面有孔的一面朝向开发板外侧)。注意不要插错方向。
由正点原子提供DHT11驱动程序,出厂内核源码路径为drivers/char/dht11.c。设备树arch/arm/boot/dts/stm32mp157d-atk.dtsi配置如下:
- / {
- // … 此处省略其他配置
- dht11 {
- compatible = "alientek,dht11";
- dht11-gpio = <&gpiof 2 GPIO_ACTIVE_LOW>;
- status = "okay";
- };
- // … 此处省略其他配置
- };
因为4.13小节的DS18B20与DHT11是共用一个管脚,它们两者的驱动正点原子都已经提供。但是两者不能同时同一个管脚,否则会提示加载驱动失败。
开发板启动前请在JP9处插好DHT11模块,亦可在启动后再插上。因为DS18B20与DHT11驱动加载可能有先后顺序,所以它们在驱动注册时申请同一个管脚时会有一个驱动加载失败。所以我们可以在文件系统命令行下重新加载对应的驱动即可!
使用DHT11模块时,先卸载DS18B20的驱动,再重新加载DHT11的驱动。
- rmmod ds18b20 //卸载DS18B20的驱动
- rmmod dht11 //卸载DHT11的驱动
- modprobe dht11 //安装DHT11的驱动
使用下面的指令获取DHT11模块的数据。如下图:前两位数字是湿度数据,后面两位是温度数据,如若获取到只有三位数据或者两位数据,请自行根据所在环境判断,或者修改驱动来改写打印的格式即可。驱动仅供参考。
cat /sys/class/misc/dht11/value
图4.12 3 读取DHT11的数据
上面读出来的数据是34%RH,31℃
4.13 DS18B20测试
DS18B20简介:
DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线”接口的温度传感器。与传
统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的
数字化温度传感器。一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,
从而为测量系统的构建引入全新概念,测量温度范围为-55~+125℃ ,精度为±0.5℃。3-5.5 V 的电压范围,采用多种封装形式,从而使系统设计灵活、方便等。
此实验需要准备DS18B20模块,可在正点原子淘宝店或者其他渠道购买。
图4.13 1 DS18B20模块
DS18B20模块的管脚排列如下图, 以正视图为准。
图4.13 2 DS18B20正视图与俯视图
ATK-STM32MP157底板上JP9处,也就是拨码开关旁边,留出了一个单排圆孔母座4Pin的座子。可用于连接DS18B20或者DHT11。按JP9处丝印可知道如何把DS18B20插到JP9上。将DS18B20半圆的一面,对准底板上丝印半圆的三个脚,半圆是朝向开发板外侧。注意不要插错方向,否则将DS18B20烧掉。如果感觉DS18B20开始发热,请迅速断电,否则将烧掉DS18B20。
由正点原子提供DHT11驱动程序,出厂内核源码路径为drivers/char/ds18b20.c。设备树arch/arm/boot/dts/stm32mp157d-atk.dtsi配置如下:
- / {
- // … 此处省略其他配置
- ds18b20 {
- compatible = "alientek,ds18b20";
- ds18b20-gpio = <&gpiof 2 GPIO_ACTIVE_LOW>;
- status = "okay";
- };
- // … 此处省略其他配置
- };
开发板启动前请在JP9处插好DS18B20,亦可在启动后再插上。因为DS18B20与DHT11驱动加载可能有先后顺序,所以它们在驱动注册时申请同一个管脚时会有一个驱动加载失败。所以我们可以在文件系统命令行下重新加载对应的驱动即可!
使用DS18B20时,先卸载DHT11的驱动,再重新加载DS18B20的驱动。
- rmmod dht11 //卸载DHT11的驱动
- rmmod ds18b20 //卸载DS18B20的驱动
- modprobe ds18b20 //安装DS18B20的驱动
使用下面的指令获取DS18B20的数据,得出来的数值除以10000,就是实际的温度数据。
cat /sys/class/misc/ds18b20/value
图4.13 3 读取DS18B20的数据
4.14 板载SDIO WIFI测试
ATK-STM32MP157使用的SDIO类型是RTK-8723DS。
开始实验时,请检查板子上的天线,也就是USB接口旁边的天线是否拧好拧紧。
4.14.1 上网(Station)模式测试
扫描WIFI热点,使用文件系统提供的iw指令可扫描出热点名称。如果要查看完整的热点信息,先开启wlan0,使用iw wlan0 scan指令,这里使用grep过滤掉了一些信息。
ifconfig wlan0 up
iw wlan0 scan | grep SSID
如下图扫描出热点名称“ZZK”,其中“x00\x00\...”是因为带中文字符显示不出来。所以用户的热点最好是由英文字符组成。
图4.14.1 1 搜索到的热点
编辑要连接的热点信息,将/etc/wpa_supplicant.conf修改成如下,输入:wq保存退出。请修改个人热点的ssid,及psk。
解释:
- ssid 为无线网络名称
- psk 为无线网络密码
- vi /etc/wpa_supplicant.conf
- ctrl_interface=/var/run/wpa_supplicant
- ctrl_interface_group=0
- update_config=1
- network={
- ssid="ZZK"
- psk="1590202****"
- }
- 如果热点是无密码的则需要将/etc/wpa_supplicant.conf,改成如下
- ctrl_interface=/var/run/wpa_supplicant
- ctrl_interface_group=0
- update_config=1
- network={
- ssid="ZZK"
- key_mgmt=NONE
- }
图4.14.1 2 配置/etc/wpa_supplicant.conf
执行下面的指令连接热点及获取ip。
wpa_supplicant -Dnl80211 -c /etc/wpa_supplicant.conf -i wlan0 &
udhcpc -i wlan0
图4.14.1 3 连接成功,获取到ip
看到如上结果,已经连接到WIFI热点,及获取到ip信息。
也可以用ifconfig指令查看我们的wlan0所获取的ip地址。
图4.14.1 4 查看获取到的ip地址
ping百度测试连通性,也可以ping网关来测试WIFI的连通性。备注:如果ping不通百度,请重启开发板,不要插网线,重新连接WIFI即可!
ping www.baidu.com -I wlan0
ping 192.168.1.1 -I wlan0
图4.14.1 5 ping百度测试
同时,如果觉得上面的连接方法过于繁琐,正点原子也提供了脚本可直接输入WIFI热点名称及密码即可连接WIFI,这就是脚本的好处,可以把重复的工作放于脚本里。
进入/home/root /wifi目录下。可以看到alientek_sdio_wifi_setup.sh脚本,脚本内容仅供参考。
cd /home/root/wifi // 忽略下面截图中的路径
ls
图4.14.1 6 WIFI连接脚本的位置
下面介绍脚本的用法,输入./alientek_sdio_wifi_setup.sh -h
- ./alientek_sdio_wifi_setup.sh -h
图4.14.1 7 查看脚本使用方法
根据用法帮助,所以我们可以这样连接WIFI热点。
ZZK: WIFI热点的名称,请根据个人的热点修改此值,注意使用该脚本时中文热点名或者有空格的热点名不生效。
1590202****: WIFI热点的密码,请根据个人的热点修改此值
- ./alientek_sdio_wifi_setup.sh -m station -i ZZK -p 1590202**** -d wlan0
图4.14.1 8 连接成功,及获取到ip地址
可以看到已经连接上,及获取到IP了,剩余的测试连通性操作与上面的一样。
4.14.2 热点(SoftAP)模式测试
我们可以把板子上的SDIO WIFI开启热点,让其他手机(或者其他板子)连接到这个热点上。这样可以将手机(或其他板子)与开发板连接,构成一个局域网,可以通过TCP、UDP等与ATK-STM32MP157板子进行通信。
直接在我们上一步的目录/home/root /wifi执行如下指令,(忽略下面截图中的路径)
- ./alientek_sdio_wifi_setup.sh -m softap -d wlan0
图4.14.2 1 发出的热点名称
如上,可以看到开启的热点名称为“alientek_softap”,默认密码为12345678。要修改热点名称和密码,请自行打开alientek_sdio_wifi_setup.sh脚本修改即可。
手机输入密码连接后,手机可能会获取不到ip。我们在手机WLAN处设置“alientek_softap”热点的静态ip即可。如下图,按静态ip的提示,自行设置一个静态IP即可。下面截图根据手机的不同,可能不太一样。请自行设置。连接成功后,有的手机会判断这个网络是无法访问互联网的状态,会询问您是否要保持这个网络连接,我们点击保持连接即可!
图4.14.2 2 手机设置静态ip连接
连接成功如下图,之后可以使用出厂系统Qt UI,TCP及UDP与手机进行互相发消息了!手机端请下载的TCP通信相关软件。
图4.14.2 3 手机已连接板载WIFI发出的热点
4.15 板载蓝牙测试
ATK-STM32MP157使用的蓝牙芯片类型是RTK-8723DS,蓝牙初始化时会加载文件系统/lib/firmware/rtlbt/目录下的固件。
4.15.1 蓝牙初始化
要想进行蓝牙测试,必须使用下面的指令进行蓝牙初始化。为了防止蓝牙未完全复位,我们向内核申请一个gpio(这个gpio硬件连接到蓝牙的复位管脚上),设置为输出方向,先给一个低电平,再给一个高电平,这样就可以给蓝牙复位了。
- echo 90 > /sys/class/gpio/export
- echo out > /sys/class/gpio/gpio90/direction
- echo 0 > /sys/class/gpio/gpio90/value
- sleep 1
- echo 1 > /sys/class/gpio/gpio90/value
- rtk_hciattach -n -s 115200 /dev/ttySTM3 rtk_h5 &
解释:
(1)rtk_hciattach:初始化蓝牙的工具,此工具只适用于ATK-STM32MP157。
(2)115200:通信比特率
(3)/dev/ttySTM3:串口设备
(4)rtk_h5:rtk_hciattach的传参蓝牙类型。
初始化时会打印许多信息,看到以下信息表明初始成功
图4.15.1 1 初始化板载蓝牙成功
4.15.2 蓝牙传输文件
在4.15.1小节蓝牙初始化成功后,我们要开启蓝牙。使用下面的指令开启蓝牙。
- hciconfig hci0 up
- hciconfig hci0 piscan // 开启蓝牙被扫描
图4.15.2 1 打开蓝牙
解释:
(1)hciconfig:蓝牙工具,用于配置蓝牙
(2)hci0:蓝牙网络节点名称
(3)up:打开蓝牙,如果设置为down表示关闭蓝牙
配置蓝牙可被扫描,使用下面指令
图4.15.2 2 扫描蓝牙
使用下面指令扫描蓝牙设备,用户先打开手机蓝牙,再使用如下指令扫描。
hcitool scan
图4.15.2 3 扫描到手机蓝牙设备
开启obexd守护进程,设置接收的目录为/home/root/
- /usr/libexec/bluetooth/obexd -r /home/root -a -d &
图4.15.2 4 开启obexd守护进程
参数解释:
(1)-r:设置用于接收的路径
(2)-a:设置自动接收
(3)-d:打印debug信息
开启命令行测试工具obexctl
obexctl
图4.15.2 5 进入obexctl交互命令行
看到以上结果表明,开启obex成功,并进入了交互命令行
4.15.2.1 蓝牙发送文件
执行下面的指令连接手机,在4.15.2小节里我们已经扫描手机蓝牙,输入下面的指令进行连接手机,格式为 connect [MAC]
- connect XX:XX:XX:XX:XX:XX //请输入个人的手机蓝牙MAC地址
图4.15.2.1 1 连接蓝牙
发送文件到手机,比如/opt/src/audio目录下有一个1.mp3文件,(注意传输的文件名称或者类型,同名文件等可能被手机重命名,某些类型的文件可能不能被手机接收)我们将它发送到手机,如下
- send /opt/src/audio/1.mp3
图4.15.2.1 2 发送文件
手机弹窗显示,是否接收来自开发板的1.mp3文件,点击接受后,可在手机任务栏上查看蓝牙的传输进度。
图4.15.2.1 3 来自开发板的mp3文件
图4.15.2.1 4 正在接收来自开发板的mp3文件
开发板上串口终端打印如下
图4.15.2.1 5 开发板蓝牙传输文件打印的信息
传输完成后可以在手机上查看到传过来的文件,如下
图4.15.2.1 6 手机上接收到的mp3文件
4.15.2.2 蓝牙接收文件
在4.15.1小节初始化蓝牙后,在4.15.2.1小节开启了obexd守护进程并设置了蓝牙的接收目录。所以我们可以在手机选择要发送的文件点击发送,选择蓝牙发送,然后再选择我们的开发板的蓝牙设备。如下。
图4.15.2.2 1 手机搜索到开发板的蓝牙
选择发送后 ,可以在手机任务栏查看发送的进度,本次编者发送了一张图片
图4.15.2.2 2 手机可查看到传输进度
传输完成,开发板打印如下
图4.15.2.2 3 终端打印传输完成
4.15.3 蓝牙建立连接
在4.1.15.1小节初始化蓝牙后 ,我们要开启蓝牙。使用如下指令
hciconfig hci0 up
使用bluetoothctl进入蓝牙命令交互行
图4.15.3 1 进入bluetoothctl蓝牙命令交互行
输入下面的指令进行蓝牙连接手机蓝牙的MAC,XX:XX:XX:XX:XX:XX。更多指令的用法,可输入help来查看。
- power on //开启电源
- agent on //开启代理,默认是开启的
- scan on //开始扫描,或者已经知道蓝牙的MAC,可不用扫描
- scan off //等待扫描出手机蓝牙MAC,后关闭
- pairable on //开启蓝牙被扫描
- connect XX:XX:XX:XX:XX:XX //连接蓝牙,XX:XX:XX:XX:XX:XX代表目标蓝牙
- exit //连接成功后退出交互界面
下图是省略输入scan on和scan off指令,因为在4.15.2小节作者已经知道本人手机蓝牙MAC。连接成功如下图。
图4.15.3 2 确认配对验证码
输入exit退出bluetoothctl命令行交互后,至此我们已经与手机蓝牙建立了连接。涉及蓝牙编程暂时未提供,Linux开发一般使用网络,比较少使用蓝牙编程。
更多linux下蓝牙指令参考如下
l2ping可像ping指令一样,检查能目标蓝牙是否在线,并有数据回复。
sdptool browse查看目标蓝牙的可用服务
- l2ping XX:XX:XX:XX:XX:XX //XX:XX:XX:XX:XX:XX为目标蓝牙地址
- sdptool browse XX:XX:XX:XX:XX:XX //XX:XX:XX:XX:XX:XX为目标蓝牙地址
…
4.16 4G模块ME3630-W测试
正点原子ATK-STM32MP157底板上预留4G模块接口,支持如EC20,ME3630-W 等4G模块的安装。出厂系统驱动只支持ME3630-W 4G模块,暂时不支持EC20模块,如需要EC20模块的支持,请与售卖厂商沟通,让厂商给予驱动支持。关于EC20的使用也可以看我们6ULL的开发指南,里面也写到。
准备ME3630-W 4G模块,正点原子店铺有售卖。将ME3630-W 4G模块插到4G模块接口处,拧上螺丝。保证4G模块与座子接口吻合连接。请使用原装天线,把天线连接到4G模块的MAIN接口处。
正确插入4G卡(支持移动、联通、电信4G卡)及插好模块,开发板启动后底板上的WWAN LED 会亮绿灯。如果WWAN LED绿灯未亮起,请检查模块是否正确连接插入,4G卡是否插入,天线是否接好,开发板是必须插上配带的12V电源,不能只用串口USB_TTL供电。
图4.16.4 1 4G模块天线SIM卡连接图
4G模块正常加载后,可以在/dev/下看到有3个ttyUSB*生成。4G模块通AT指令访问/dev/ttyUSB2进行通信。
ls /dev/ttyUSB*
图4.16.4 2 查看生成的/dev/ttyUSB*节点
使用lsusb指令可以看到模块的相关信息。
lsusb
图4.16.4 3 查看模块的相关信息
4.16.1 pppd拨号上网
出厂文件系统/home/root/me3630-w/目录下已经存放有me3630-w相关脚本,脚本具体内容介绍可参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.xpdf第七十一章Linux 4G通信实验。
新建一个目录,用于下面的脚本运行时生成DNS客户机配置文件。
- mkdir /etc/ppp/
- 进入/home/root /me3630-w/目录下,忽略下面截图中的路径。
- cd /home/root/me3630-w/
- 执行下面ppp-on脚本,&的作用是后台运行
- ./ppp-on &
图4.16.1 1 ppp拨号上网获取到ip
添加网关,网关根据获取的ip设置,如上图,获取的ip为10.96.7.230,及远程网关为10.96.7.229。
route add default gw 10.96.7.229
使用ifconfig可查看4G模块的网络名称
图4.16.1 2 查看4G网络节点名称
ping百度测试连通性,-I是指定网卡。看到如下结果,有数据回复表示连通。按“Ctrl +c”终止指令。
图4.16.1 3 ping百度测试连网络连接
4.16.2 ECM上网
要配置 ECM 模式上网,请先执行 disconnect 脚本断开 pppd 拨号上网,再执行下面的指令
配置成 ECM 模式链接网络。
图4.16.2 1 先断开上一步的pppd连接
直接执行ecm-on脚本,&的作用是后台运行
图4.16.2 2 ecm连接
使用ifconfig指令查看ip,这里我们有两个usb网络节点,一个是otg网络的,另一个是4G模块网络的。这里我们如果不确定哪个是我们4G网络的,请把otg连接线断开,哪个网络有数据收发的ip,哪个就是4G网络的。这里会获取到192.168.7.1是因为文件系统默认会给这usb节点一个默认的ip地址,所以我们要重新获取ip地址。
图4.16.2 3 确认4G网络节点
4G网络重新获取ip地址
图4.16.2 4 4G获取ip
再使用ifconfig指令查看我们获取到的ip地址
图4.16.2 5 查看4G网络获取到的ip
测试网络连通性,ping 百度官网即可。看到如下结果表示能联网,按Ctrl+c终止指令。
ping www.baidu.com -I usb0
图4.16.2 6 ping百度测试连通性
4.17 TF(SD)卡测试
需要准备TF卡
开发板启动后将TF卡插到开发板底板卡槽处。开发板会将TF卡自动挂载。
作者是从eMMC启动,可以看到/dev/mmcblk1就是TF卡的设备节点,系统将/dev/mmcblk1挂载到/run/media/mmcblk1目录下。(作者使用的TF卡只有一个分区)
图4.17 1 查看TF卡的分区
使用df命令查看TF卡挂载的目录
图4.17 2 查看TF卡的挂载目录
4.17.1 读取速度测试
常用于测试硬盘读取速度指令有hdparm与dd,本次只演示hdparm读取TF卡的速度。(读取速度与你所用的TF卡类型有关)
图4.17.1 1 读取速度评测
4.17.2 写速度测试
使用dd指令写50MB数据到“/run/media/mmcblk1”目录,也就是TF卡的挂载目录。注意,写的数据越大数据,写入的速度越接近实际值。
- time dd if=/dev/zero of=/run/media/mmcblk1/test bs=1024k count=50 conv=fdatasync
图4.17.2 1 写速度评测
测试完成删除“/run/media/mmcblk1”目录下的test文件
rm /run/media/mmcblk1/test
图4.17.2 2 删除写入的文件
4.18 OV5640摄像头/USB摄像头测试
实验前请准备ov5640摄像头模块(500万像素),本公司的任何分辨率的RCB LCD电容屏。
摄像头插法:
摄像头镜头往开发板外则直接插到CAMERA接口处。由于没有防反插设计,插摄像头时需要注意看底板丝印,按引脚编号对应插上,即镜头朝向板子外侧。
开机前先插上摄像头,不支持热插拨。插上摄像头再启动开发板。
图4.18 1 启动时5640驱动打印的信息
systemctl stop atk-qtdesktop-linuxfb
systemctl start weston@root.service // 开启Weston桌面
使用gst-launch-1.0可直接在Weston桌面显示捕获的画面。
查看ov5640生成的节点,确认节点是video0。
ls /dev/video0
查看驱动中支持摄像头的格式,主要查看支持的分辨率采集及支持的采集帧数。
v4l2-ctl --device=/dev/video0 --list-formats-ext
图4.18 2 ov5640节点
下面为一条指令,注意分行复制。不要复制错标点符号。采集的画面在Weston桌面上显示。终止指令按“Ctrl + c”。
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=YUY2, width=640, height=480, framerate=(fraction)60/1" ! waylandsink
同理,实验前请准备USB摄像头,符合UVC(USB video device class)协议的摄像头均可。UVC,全称为:USB video class 或USB video device class,是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准。符合UVC规格的硬件设备在不需要安装任何的驱动程序下即可在主机中正常使用。
插上USB摄像头,支持热插拨,串口打印的信息如下。
图4.18 3 USB摄像头打印的信息
由于上面测试ov5640是/dev/video0,那么/dev/video1就是USB摄像头的节点。
图4.18 4 查看USB摄像头的节点
查看USB摄像头的支持格式。
v4l2-ctl --device=/dev/video1 --list-formats-ext
执行下面的指令采集画面。下面为一条指令,注意分行复制。不要复制错标点符号。终止指令按“Ctrl + c”。
gst-launch-1.0 v4l2src device=/dev/video1 ! "video/x-raw, format=YUY2, width=640, height=480, framerate=(fraction)30/1" ! waylandsink
4.19 SPDIF测试
SPDIF简介:
SPDIF(Sony/Philips Digital Interface )是SONY、PHILIPS数字音频接口的简称。就传输方式而言,SPDIF分为输出(SPDIF OUT)和输入(SPDIF IN)两种。
如下图,ATK-STM32MP157底板上两个SPDIF接口,一个为SPDIF OUT接口,另一个为SPDIF IN接口。
测试需要使用到spdif数据光纤,测试方法略。
4.20 ADC测试
注意:ADC的采集电压绝对值最大是3.3V,请不要超过 3.3V,否则可能对芯片造成损坏。
ATK-STM32MP157底板上JP2处有一路ADC与一路DAC方便用户测试。底板原理图如下。
图4.20 1 ADC/DAC底板原理图
ADC/DAC接口开发板位置如下
图4.20 2 开发板ADC/DAC位置
从上面的原理图可知,DAC1输出可通过跳线帽给ADC1作输入,或者通过RP_AD(微调电阻)给ADC1作输入。
ADC的主要特性:
STM32MP157D支持ADC功能,提供两个ADC控制器,采样精度可配置为16, 14, 12, 10和8。
在Linux系统中,ADC采样属于IIO子系统下,可以通过SYSFS提供的接口来访问ADC控制器,使用的是16位精度。
使用下面的指令来获取ADC1采样的数据,这里读出里出来的值是原始值raw_value。
cat /sys/bus/iio/devices/iio\:device0/in_voltage19_raw
需要使用下面的计算公式来转换成实际值
real_value = (raw_value + offset_value) * scale
其中offset的值可以通过下面的指令获取
cat /sys/bus/iio/devices/iio\:device0/in_voltage_offset
图4.20 3 查看offset的值
其中scale的值可以通过下面的指令获取,此值跟参考电压有关。
cat /sys/bus/iio/devices/iio\:device0/in_voltage_scale
图4.20 4 查看scale值
4.21 DAC测试
ATK-STM32MP157D底板上JP2处有一路ADC与一路DAC方便用户测试。底板原理图如下。
图4.21 1 ADC/DAC底板原理图
ADC/DAC开发板位置如下
图4.21 2开发板ADC/DAC位置
从上面的原理图可知,DAC1输出可通过跳线帽给ADC1作输入,或者通过RP_AD(微调电阻)给ADC1作输入。
DAC的特性如下:
它可以配置为8位或12位模式(数据可以左对齐或右对齐)
它有两个输出通道,每个通道都有自己的转换器
双DAC通道模式可以独立或同时进行
它有内置的噪声和三角形波形发生器,并支持转换的触发器,使用:TIM,LPTIM或EXTI
DAC输出缓冲器允许高驱动器输出电流
它可以在正常模式或低功耗采样和保持模式下工作(使用LSI时钟,来自RCC)
可以与DMA控制器结合使用(带欠载错误检测)
通用基准电压可由连接到VREF +引脚的VREFBUF或任何其他外部regulator提供。
在Linux系统中,DAC属于IIO子系统下,可以通过SYSFS提供的接口来控制DAC控制器,使用的是12位精度。
开启DAC输出
echo 0 > /sys/bus/iio/devices/iio\:device1/out_voltage1_powerdown
图4.21 3 开启DAC输出
同理与ADC一样,需要使用下面的计算公式来转换成实际值
real_value = raw_value * scale
其中scale的值可以通过下面的指令获取,此值跟参考电压有关。
cat /sys/bus/iio/devices/iio\:device1/out_voltage1_scale
设置DAC输出的电压值,因为DAC是12位精度,也就是说,最大值只能设置2的12次方减1,即最大值是4095。参考电压为3.3V。
echo 1000 > /sys/bus/iio/devices/iio\:device1/out_voltage1_raw
再查看DAC输出的数值。
cat /sys/bus/iio/devices/iio\:device1/out_voltage1_raw
图4.21 4 查看DAC输出的数值
可以通过下面的式子算出DAC的输出电压值。其中out_raw为上面DAC输出的数值。3.3V是 输出参考电压。
Vout = 3.3 *(out_raw / (2^12 - 1))
我们可以将跳线帽接到ADC1处,让DAC1输出给ADC1采集 。在4.20小节中读取出ADC1的采集电压,也是可以测出DAC1的电压值。
4.22 CPU温度
使用下面指令查看CPU温度,温度的高低与环境温度及CPU运行状况有关,例如跑一些大的应用,跑视频音频等,温度会高一些,不建议用手触摸CPU表面,防止带静电导致芯片烧坏。
cat /sys/class/hwmon/hwmon0/temp1_input
图4.22 1 查看CPU温度
4.23 CPU主频
使用cpufreq-info指令查看CPU主频
cpufreq-info
图4.23 1查看CPU主频
通过以上结果可知,CPU0和CPU1工作在400MHZ到800MHZ之间,调频模式为“ondemand”,根据此模式定期检查负载,根据负载来调节频率。
4.24 查看系统信息
4.24.1 查看系统内核版本号
正点原子STM32MP157出厂内核使用git管理,所以出货时会自带一个内核版本号。
uname -r
图4.24.1 1 查看系统内核版本号
4.24.2 查看系统主机名
查看系统主机名,可修改/etc/hostname来定制个人的主机名。
cat /etc/hostname
图4.24.2 1 查看系统主机名
4.24.3 查看CPU相关信息
cat /proc/cpuinfo
图4.24.3 1 查看CPU相关信息
如上比如BogoMIPS这个值,是根据CPU运行速度的指标,是Linux操作系统中衡量计算机处理器运行速度的的一种尺度,是由Linux主要开发者linus Torvalds通过calibrate_delay()函数计算出来的,但是只能用来粗略计算处理器的性能,并不十分精确。影响这个值的大小因素是CPU当前运行的主频。如上24.00是cpu运行在400MHZ时所计算出来的数值。
4.24.4 查看内存相关信息
cat /proc/meminfo
图4.24.4 1 查看内存相关信息
4.24.5 查看系统登录欢迎信息
cat /etc/issue
可以编辑这个issue文件来定制开机欢迎信息。
图4.24.5 1 查看系统登录欢迎信息
4.25 HDMI测试
板载HDMI最大支持分辨率简介
因为STMP32MP157 CPU没有HDMI控制器,所以只能用RGB转HDMI。ATK-STMMP157板载HDMI Sil902x芯片(充当一个HDMI发送器),Sil902x芯片支持1080p输出。但是STMMP157 CPU 最大只能输出给LTDC 信号最大为WXGA (1366×768) @60 fps。所以板载的HDMI只能由CPU的LTDC信号决定,也就是最大只能输出WXGA (1366×768) @60 fps。
出厂系统默认配置的HDMI输出分辨率大小为1280×720 @60 fps。无需修改成WXGA (1366×768) @60 fps,因为有些显示器可能不支持这个分辨率,可能会显示不了。经过实测,出厂系统使用Qt越大分辨率会不流畅,因为Qt界面分辨率大的比较耗性能。所以如果有正点原子RGB LCD屏在滑动界面时会感觉比较流畅,因为RGB LCD屏分辨率较小,要知道STM32MP157也只不过是两个A7而已,性能不能与手机相比。
由于HDMI信号是由RGB信号转过来的,所以HDMI与RGB LCD共用一个接口。所以理论上只能使用其中一种。
开发板首先用HDMI连接线(用户手上需要有HDMI连接线,没有就需要用户自行购买),连接到开发板上的HDMI接口,另一端连接到显示器,显示器上电。开发板拨码从eMMC启动,在串口终端里看到Uboot启动倒计时结束后,按下数字键“2”来选择使用HDMI的设备树,按Enter后就会加载HDMI设备树启动。
图4.25 1 HDMI设备树选择
启动成功后,可以在显示屏显示出厂系统的Qt UI。如下图。
图4.25 2 HDMI显示屏显示的效果
永久修改加载HDMI设备树启动
出厂系统默认以LCD的设备树启动,默认以stm32mp157d-atk.dtb这个设备树启动。从eMMC启动后,可以在出厂文件系统的挂载文件目录下的/run/media/mmcblk2p2/mmc1_extlinux/stm32mp157d-atk_extlinux.conf这个文件里修改默认启动的设备树。若用户是使用TF(SD)系统卡启动启动系统,应在出厂文件系统的挂载文件目录下的/run/media/mmcblk1p2/mmc0_extlinux/stm32mp157d-atk_extlinux.conf这个文件修改。
在串口终端输入以指令,编辑启动配置文件,将stm32mp157d-atk修改为stm32mp15d-atk-hdmi。按Esc再按:wq保存退出。这样以后开发板启动就会默认以HDMI设备树启动。用户不用在Uboot选择设备树启动了。
vi /run/media/mmcblk2p2/mmc1_extlinux/stm32mp157d-atk_extlinux.conf
图4.25 3 修改默认加载HDMI设备树
关于stm32mp157d-atk_extlinux.conf文件语法的说明,在我们STM32MP1嵌入式Linux驱动开发指南里有详细的说明。
4.26 OpenGL测试
测试先请先退出Qt桌面界面(linuxfb方式显示则不用退出),输入glmark2-es2-drm指令可查看显示器或者LCD上OpenGL应用程序在运行效果,目的测试OpenGL ES 2.0。在串口终端打印FPS及时间。
glmark2-es2-drm
4.27 关机和重启
关机
在终端输入poweroff指令即可关机,关机前请保存重要数据,输入sync同步数据。也可以保存数据后直接关闭电源即可关机。
sync
poweroff
重启
在终端输入reboot指令即可重启,关机前请保存重要数据,输入sync同步数据。也可以保存数据后直接按复位按钮(板子上红色按键帽的按钮)可重启板子。
sync
reboot
|