锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【正点原子MP157连载】第四章 ATK-STM32MP157功能测试-摘自【正点原子】STM32MP157快速体验

时间:2022-08-29 07:00:01 mems热敏传感器lga封装的集成电路连接座型公头负载终端连接器ad1814jp集成电路cc200光纤传感器

第四章 ATK-STM32MP157功能测试

    • **4.1 LED测试、蜂鸣器测试**
    • **4.3 LCD测试**
    • **4.4 串口测试**
    • **4.5 USB测试**
    • **4.6 网络测试**
    • **4.7 CAN**
    • **4.8 RTC时钟测试**
    • **4.9 AP3216C测试**
    • **4.10 ICM20608测试**
    • **4.11 音频测试**
    • ***4.12 DHT11测试***
    • **4.13 DS18B20测试**
    • **4.14 板载SDIO WIFI测试**
    • **4.15 板载蓝牙测试**
    • **4.17 TF(SD)卡测试**
    • **4.18 OV5640摄像头/USB摄像头测试**
    • **4.19 SPDIF测试**
    • **4.20 ADC测试**
    • **4.21 DAC测试**
    • **4.22 CPU温度**
    • **4.23 CPU主频**
    • **4.24 查看系统信息**
    • **4.25 HDMI测试**
    • **4.26 OpenGL测试**
    • **4.27 关机和重启**

(1)实验平台:正点原子STM32MP157开发板
(2)购买链接:https://item.taobao.com/item.htm?&id=629270721801
(3)全套实验源码 手册 视频下载地址:http://www.openedv.com/thread-318813-1-1.html
(4)正点原子官方B站:https://space.bilibili.com/394620890
(5)正点原子STM32MP157技术交流群:691905614
在这里插入图片描述

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

在上图我们可以知道event2为按键的输入事件,通过上面我们还发现event0为触摸屏(ft5x06触摸芯片)的事件,所以event2不一定是按键的事件,这与用户板子上的设备有关!所以我们要使用lsinput来查看输入事件。
我们使用od -x 或者hexdump指令来查看按键的输入信息。按下KEY0或者KEY1有如下信息出现,说明按键正常。按Ctrl+c终止指令。

od -x /dev/input/event2
hexdump /dev/input/event2

4.3 LCD测试

在出厂系统里,因为正点原子的屏幕rgb数据线上的最高位有ID,所以出厂系统会识别屏的分辨率。才加载相应的触摸驱动。正点原子所使用的RGB屏幕有5种,如下表:

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.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。

由于USB_TTL是我们的调试串口,我们在开发板启动时能正常打印和输入信息,说明这个串口是可以正常工作的,就可以不用再测试了。

4.4.1 DB9串口测试

从上表可以知道,我们的DB9类型串口有两个,分别是com2(母头)和com1(公头),所以用户需要准备USB转RS232公头串口线,和USB转232母头串口线。如下图,

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。

通过下面的指令配置串口

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

同时在上位机上也会返回发送的数据,注意使用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处。如下图。

通过下面的指令配置串口

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相关测试工具可以自行测试,不一定要用这个模块。如下图。

将底板的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接口上,如下图。

我们可以直接进入/run/media/sda1目录进入读写文件操作。
读速度测试:

hdparm -t /dev/sda1

写速度测试:

time dd if=/dev/zero of=/run/media/sda1/test bs=1024k count=100 conv=fdatasync
rm /run/media/sda1/test  //写完后删除写入的文件

这里代表写入100MiB的文件,写入速度为11.2 MB/s。实际上写入的文件越大求平均写入速度越接近实际值。

4.5.2 USB OTG测试(OTG网络)

ATK-STMMP157底板上USB-OTG接口,可当作USB网络使用(局域网)。
我们使用一根USB Type-C连接线连接USB_OTG接口到PC(电脑)。

USB-OTG在系统启动后,USB-OTG会生成一个usb0网络节点。我们可以使用ifconfig指令查看。

打开Ubuntu虚拟机,按如下步骤操作,将PC(电脑)识别的可移动设备连接到虚拟机上。

并且Ubuntu虚拟机上,生成一个网络节点。在Ubuntu使用ifconfig命令查看。并且是与ATK-STM32MP157相同一个网段的ip。所以它们构成了一个局域网,可以使用网络进行通信或者传输文件等操作!

4.5.3 USB鼠标测试
在出厂系统启动后,插上鼠标,LCD屏幕或连接HDMI到显示屏,屏上会显示鼠标指针,即可用鼠标操作Qt界面。

4.6 网络测试

ATK-STMMP157核心板上搭载一颗千兆网络芯片,CPU只支持一路千兆网络,自适应10/100/1000M。
在文件系统使用如下指令测试网络,将网线插在网口处,确保网线能上网。
查看网络获取的IP

ifconfig

检查网络能否上网,如果有数据回复,则说明网络功能正常。按Ctrl+c终止指令。

ping www.baidu.com

测试是否为千兆网络,注意要使用千兆网线,千兆路由器或者千兆交换机,PC(电脑)网卡必须是千兆网卡,否则测试出来的速度或识别出来的速度可能是百兆的!
如下图,看到软件识别为1Gbps/Full代表是千兆网络。

使用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测试

经过测试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.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

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.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底板位置如下

由正点原子提供驱动程序,源码路径为出厂源码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.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底板上的位置如下

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.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模块,可在正点原子淘宝店或者其他渠道购买。

正点原子淘宝DHT11的技术参数如下:
工作电压范围:3.3V-5.5V
工作电流: 平均0.5mA
输出:单总线数字信号
测量范围:湿度 20~90%RH,温度 0~50℃
精度 :湿度±5%,温度±2℃
分辨率 :湿度 1%,温度 1℃
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

上面读出来的数据是34%RH,31℃

4.13 DS18B20测试

DS18B20简介:
DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线”接口的温度传感器。与传
统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的
数字化温度传感器。一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,
从而为测量系统的构建引入全新概念,测量温度范围为-55~+125℃ ,精度为±0.5℃。3-5.5 V 的电压范围,采用多种封装形式,从而使系统设计灵活、方便等。
此实验需要准备DS18B20模块,可在正点原子淘宝店或者其他渠道购买。

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.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…”是因为带中文字符显示不出来。所以用户的热点最好是由英文字符组成。

编辑要连接的热点信息,将/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
}

执行下面的指令连接热点及获取ip。

wpa_supplicant -Dnl80211 -c /etc/wpa_supplicant.conf -i wlan0 &
udhcpc -i wlan0

看到如上结果,已经连接到WIFI热点,及获取到ip信息。
也可以用ifconfig指令查看我们的wlan0所获取的ip地址。

ping百度测试连通性,也可以ping网关来测试WIFI的连通性。备注:如果ping不通百度,请重启开发板,不要插网线,重新连接WIFI即可!

ping www.baidu.com -I wlan0
ping 192.168.1.1 -I wlan0

同时,如果觉得上面的连接方法过于繁琐,正点原子也提供了脚本可直接输入WIFI热点名称及密码即可连接WIFI,这就是脚本的好处,可以把重复的工作放于脚本里。
进入/home/root /wifi目录下。可以看到alientek_sdio_wifi_setup.sh脚本,脚本内容仅

相关文章