tag 标签: linux

相关帖子
相关博文
  • 热度 1
    2022-11-30 11:14
    296 次阅读|
    0 个评论
    优秀的产品离不开完善的测试,即使一个简单的USB接口也要确保稳定性及兼容性。不同的U盘在ARM+Linux板卡下的兼容性、速率怎么样呢?本文将为大家提供测试参考数据及详细测试步骤! 1. 测试准备 主控选用最近发布的64位Cortex-A55核心板,搭载16 bit高速DDR4 内存,最高配置为1G内存+8G存储,工作温度满足-40~85℃等级。该系列核心板外设资源丰富,支持千兆网x 2、USB2.0 x 2、UART x 5、CAN-FD x 2、SPI x 3、I2C x 2、I2S x 4、ADC x 2 等。 图1 HD-G2UL系列核心板 U盘选用市面上常见的海康、闪迪、爱国者、金士顿品牌,部分U盘支持USB3.0模式,但受制于ARM处理器的USB2.0,其均只能工作在USB2.0模式。 2. 测试原理 2.1 dd命令 1. Linux dd 命令用于读取、转换并输出数据。 2. dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。 3. 测试指令如下: 2.2 dd的相关解释 2.3 开始测试 将U盘插入USB口后开发板会打印插入U盘时的调试信息,并自动挂载到/run/media/sda1目录下。按照测试原理中的测试方法逐个测试U盘,并记录数据。 2.3.1 海康威视 USB3.0 64GB 2.3.2 闪迪USB3.0 16GB 2.3.3 爱国者USB3.0 64GB 2.3.4 金士顿USB3.0 32GB 2.3.5 闪迪 USB2.0 1GB 2.3.6 爱国者USB2.0 32GB 3. 测试结果 注:受测试环境影响,本数据可能存在偏差,仅供开发者参考。
  • 热度 3
    2022-7-13 11:03
    479 次阅读|
    0 个评论
    嵌入式产品开发中经常遇到音频的输入输出问题,如何为其添加“喇叭”、“麦克风”设备呢?本文将简单介绍ARM+Linux产品中的音频解决方案。 我们先认识下I2S(Inter-ICSound)总线。I2S又称集成电路内置音频总线,该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,有效避免因时差诱发的失真。 以HDG2L-IoT评估套件为例,RZ/G2L处理器提供至少一路I2S总线,通过该总线与音频编解码芯片(IC型号WM8960)连接,用于提供高质量的录音播音功能。音频模块的硬件部署如下所示。 图1HDG2L-IoT音频接口 G2L核心板与WM8960的音频通讯引脚如下所示: 在Linux系统的音频编解码驱动中,通过I2C通讯接口与音频IC通讯,把音频IC内的各个功能寄存器抽象成音频控件,这样用户即可在User空间内直接调整IC内的参数。I2S音频引脚,则是数字信号发送、接收的通道。 播音时,音频IC接收到数字信号后则转换为模拟信号发送出去,录音时,音频IC把收到的音频模拟量转换为数字量,发送给处理器。 ALSA是linux的主流音频体系结构,它包含内核驱动集合,API库和工具对Linux声音进行支持,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。 Linux通过alsa库以及alsa工具管理音频IC的控件,通过“amixercontrols”列出当前系统内的音频控制项: 音频功能的关键控件信息如下所示。(录音通道、播音通道、耳机音量大小、喇叭音量大小)。 在开发板下,运行aplay程序可以对音频播放进行测试。在测试前,需要将耳机插入开发板的耳机插孔中。 为测试基于I2S的音频输出接口,在命令行下执行如下命令: 其中2.wav为需要播放的音频文件,且此处假定2.wav位于/home/root/audios目录下。 在进行音频播放时,对于基于I2S的音频输出接口,可以使用amixer程序对音量进行调节。使用amixer程序对耳机播放音量进行调节的命令行格式为: 其音量值取值范围在0~127之间,127表明最大音量。例如要将音量设置为100,可在命令行下执行如下命令: 将扬声器接入HDG2L-IOT开发板的左右声道插座中,在播放音频前可先设置扬声器播放音量以及总音量,然后播放音频文件: 录音功能需设置录音控件的参数,如下所示。 用arecord命令录音并保存为“/tmp/t.wav”,然后用aplay命令回放进行验证。 由于当前的麦克风输出信号仅接到了音频处理的Left端作为输入,所以播放录音文件时仅左声道有输出,若希望将麦克风输出信号同时记录在左右声道可做如下设置: 将“ADCDataOutputSelect”设定为1,其值含义为“LeftData=LeftADC;RightData=LeftADC”。 由上可知,音频编解码芯片在Linux系统中以控件的形式存在,内部的参数一般只记录在内存中,当系统掉电时,修改的参数就会消失,所以需要保存和恢复指令将上次的参数保存在配置文件中。 alsa的配置文件为:/var/lib/alsa/asound.state 控件修改后的写入操作如下所示。 控件恢复参数的操作如下所示(注:重启板子后会自动读取配置文件)。
  • 热度 6
    2022-7-6 16:53
    1656 次阅读|
    0 个评论
    B y Toradex 胡珊逢 在先前的文章我们已经介绍在使用 eMMC 的模块上配置只读属性的文件系统,以及利用 s quashfs 和 o verlayfs 挂载可写分区。 T oradex 的产品除了使用 eMMC 存储外,还有部分是采用 Nand Flash ,例如 Colibri iMX7 和 Colibri iMX6ULL 。下面将以 Colibri iMX7 为例介绍如何配置只读属性的文件系统。 由于存储介质不同, Nand Flash 上通常采用如 jffs2 、 UBI 等格式文件系统。 Toradex 的 Linux 系统使用 UBI 文件系统。 在 Colibri iMX7 的 Nand Flash 上会采用以下规划。 Nand Flash 总体上划分为两个部分。最前面的 raw 部分不采用任何文件系统,直接存储模块硬件信息 bcb , u-boot 和 u-bo ot 环境变量。第二部分则使用 UBI ,创建 5 个 volume ,用于存储内核文件( kernel )、设备树文件( dtb )、 M 4 的固件( m 4-fw )、 L inux 文件系统( r ootfs )、用户文件( userdata )。其中 rootfs 将设置成自读属性,而 userdata 则可以写入数据。 T oradex Easy Installer 可以通过 image.json 文件方便地修改分区,从而避免使用命令工具。首先从 这里 下载用于 Colibri iMX7S 的 L inu x BSP v5.x 安装文件。解压后在 image.json 中添加 userdata 的相关配置。 ----------------------------------- { "name": "rootfs", "content": { "filesystem_type": "ubifs", "filename": "Reference-Minimal-Image-colibri-imx7.tar.xz", "uncompressed_size": 108.1171875 }, "size_kib": 102400 }, { "name": "userdata", "content": { "filesystem_type": "ubifs", "filename": "app.tar.xz", "uncompressed_size": 0.1171875 } } ----------------------------------- 这里 name 指定 ubi volume 的名字, filesystem_type 用于指定 ubi fs 文件格式, f ilename 里包含了需要烧录到 userdata v olume 的文件,这些是用户应用和配置等, uncompressed_size 是指 app.tar.xz 未压缩的大小,用于显示 Toradex Easy Installer 的安装进度条。更多关于 image.json 配置说明请参考 这里 。 使用 Toradex Easy Installer 将上面修改的镜像烧录到 Colibri iMX7S 即可。启动后进入 u-boot ,使用下面名可以看到所创建的 volume 。 ----------------------------------- Colibri iMX7 # ubi part ubi Colibri iMX7 # ubi info layout Volume information dump: vol_id 0 ...... name kernel Volume information dump: vol_id 1 ...... skip_check 0 name dtb Volume information dump: vol_id 2 ...... skip_check 0 name m4firmware Volume information dump: vol_id 3 ...... skip_check 0 name rootfs Volume information dump: vol_id 4 ...... skip_check 0 name userdata ----------------------------------- 启动进入 L inux 后, userdata 并不会被自动挂载,需要将下面内容添加到 /etc/fstab 文件中。现在 rootfs 根目录还没有设置成只读属性,可以创建 /home/root/userdata 目录用于挂载 userdata 卷。 ----------------------------------- ubi:userdata /home/root/userdata ubifs defaults,noatime,rw 1 1 ----------------------------------- 于此同时,还可以进行系统配置。例如添加一个开机启动应用。该应用 write_to_file 在运行时会往 /home/root/userdata 写入一个文件。在 /etc/systemd/system/ 目录下创建 user-demo.service 。 user-demo.service ----------------------------------- Description=launch user's demo on dedicated partition ConditionFileIsExecutable=/home/root/userdata/write_to_file After=multi-user.target WorkingDirectory=/home/root/userdata Type=simple ExecStart=/home/root/userdata/write_to_file WantedBy=multi-user.target ----------------------------------- 运行下面命令使 user-demo.service 开机运行。然后重启系统。 ----------------------------------- ~# systemctl enable user-demo.service ~# reboot ----------------------------------- 此时,使用 m ount 命令查看所挂载的卷,其中有 ubi:userdata 。 ----------------------------------- ~# mount -l tmpfs on /var/volatile type tmpfs (rw,relatime) ubi:userdata on /home/root/userdata type ubifs (rw,noatime,assert=read-only,ubi=0,vol=4) ----------------------------------- 在 /home/root/userdata 目录下也可以看到 write_to_file 写入的文件 file.txt 。 ----------------------------------- ~/userdata# ls file.txt write_to_file ~/userdata# cat file.txt This is a writing file test ~/userdata# systemctl status user-demo.service * user-demo.service - launch user's demo on dedicated partition Loaded: loaded (/etc/systemd/system/user-demo.service; enabled; vendor preset: disabled) Active: inactive (dead) since Wed 2022-07-06 06:09:44 UTC; 14min ago Process: 316 ExecStart=/home/root/userdata/write_to_file (code=exited, status=0/SUCCESS) Main PID: 316 (code=exited, status=0/SUCCESS) Jul 06 06:09:44 colibri-imx7-02873356 systemd : Started launch user's demo on dedicated partition. Jul 06 06:09:44 colibri-imx7-02873356 systemd : user-demo.service: Succeeded. ----------------------------------- 最后需要再次修改 /etc/fstab 将 rootfs 根目录设置为只读属性, n oatime 后面添加 ro 。 ----------------------------------- /dev/root / auto noatime,ro 1 1 ----------------------------------- 重启系统,进入 u-boot 命令模式,配置下参数。 ----------------------------------- setenv ubiargs "ubi.mtd=ubi root=ubi0:rootfs ro rootfstype=ubifs ubi.fm_autoconvert=1" saveenv reset ----------------------------------- 重启进入 L inux 系统。根目录 / 已经是只读状态,无法创建文件。而 /home/root/userdata 目录下的应用仍可以正常执行并写入文件。 ----------------------------------- :~# mount -l ubi0:rootfs on / type ubifs (ro,noatime,assert=read-only,ubi=0,vol=3) ~# mkdir test mkdir: can't create directory 'test': Read-only file system ----------------------------------- 总结 通过将 Linux 的系统文件设置为只读状态,可以降低因文件系统损坏导致无法启动的概率。对于更高要求的应用,甚至可以使用外部存储作为备份,用于恢复文件。
  • 热度 3
    2021-9-2 14:29
    2012 次阅读|
    1 个评论
    前 言 本文主要介绍i.MX 8M Mini基于FlexSPI、PCIe与FPGA的高速通信案例。 本文档适用开发环境: Windows开发环境:Windows 7 64bit、Windows 10 64bit 虚拟机:VMware15.1.0 Linux开发环境:Ubuntu18.04.4 64bit U-Boot:U-Boot-2020.04 Kernel:Linux-5.4.70 Linux SDK:5.4.70_2.3.0 *测试硬件平台:TLIMX8-EVM评估板(NXP i.MX 8M Mini) 想要获取案例详细说明、 源码的朋友请于评论区留言~ 案例一:主要演示ARM Cortex-A53通过FlexSPI接口读取FPGA(Spartan-6采集卡TL-HSAD-LX)发送的模拟数据,并进行校验,通过串口打印相关信息。实测速率为114.89MB/s。 案例二:主要演示ARM Cortex-A53通过PCIe接口与FPGA进行通信,实现对CameraLink相机图像的采集、编码和显示。实测传输帧率为60fps。 1 flexspi_read案例 1.1 案例说明 本案例主要演示ARM Cortex-A53通过FlexSPI接口读取FPGA(Spartan-6采集卡TL-HSAD-LX)发送的模拟数据,并进行校验,通过串口打印相关信息。 (1) 驱动默认配置FlexSPI为DDR模式(双边沿),配置FlexSPI的时钟源为400MHz,分频系数pre_divider和post_divider分别为2和5,此时FlexSPI的ROOT CLK时钟为400MHz/2/5 = 40MHz,DDR模式的传输时钟SCLK= ROOT SCLK/2 = 20MHz,数据位宽为8bit,即理论传输速率为40MB/s,实测速率为37.56MB/s。 (2) 驱动如配置FlexSPI为DDR模式(双边沿),配置FlexSPI的时钟源为400MHz,分频系数pre_divider和post_divider分别为1和3,此时FlexSPI的ROOT SCLK时钟为400MHz/1/3 = 133MHz,DDR模式的传输时钟SCLK = ROOT SCLK/2 = 66.5MHz,数据位宽为8bit,即理论传输速率为133MB/s,实测速率为114.89MB/s。 FPGA端:发送从0x00递增至0xFF的数据。 ARM端:读取数据并进行校验,打印误码率、读取速率和读取到的数据。 程序流程图如下: 图 2 1.2 案例测试 图 3 请按照上图进行硬件连接,并将案例bin目录下的可执行文件flexspi_read、“driver\bin\”目录下驱动文件flexspi_imx8.ko、“dts\image\”目录下的设备树文件tlimx8-evm-flexspi.dtb拷贝至评估板文件系统。采集卡TL-HSAD-LX加载或固化“data_to_flexspi\bin\”目录下的.bit或.mcs文件。在评估板文件系统flexspi_read文件所在路径下,执行如下命令查询程序参数说明。 Target# ls Target# ./flexspi_read -h 图 4 执行如下命令将默认使用的设备树tlimx8-evm.dtb进行备份,然后把tlimx8-evm-flexspi.dtb拷贝至“/run/media/mmcblk1p1/”目录并重命名为tlimx8-evm.dtb。 Target# cp /run/media/mmcblk1p1/tlimx8-evm.dtb linux-tlimx8-evm.dtb//备份默认的tlimx8-evm.dtb,新文件名为linux-tlimx8-evm.dtb Target# cp tlimx8-evm-flexspi.dtb /run/media/mmcblk1p1/tlimx8-evm.dtb 备注:更换设备树后,需重启评估板方可使设备树生效。 图 5 1.2.1 功能测试 执行如下命令加载FlexSPI驱动。 Target# insmod flexspi_imx8.ko 图 6 执行如下命令进行测试。 Target# ./flexspi_read -a 0x08000000 -s 4096 图 7 本次测试速率为37.56MB/s,误码率为0,与理论速率40MB/s接近。 备注:受限于测试板卡的硬件连接形式的影响,37.56MB/s是零误码率时的最高实测速率。 若读取小于或等于2048Byte的数据时,每次读完需清空FlexSPI的RX Buffer,否则下次读取的数据是缓存在Buffer中的旧数据。 Target# devmem2 0x30bb0000 w 0xFFFF7031 图 8 1.2.2 性能测试 执行如下命令卸载flexspi驱动,并重新加载驱动。同时采集卡TL-HSAD-LX重新加载或固化FPGA程序。 Target# rmmod flexspi_imx8 Target# insmod flexspi_imx8.ko pre_divider=1 post_divider=3 备注:pre_divider和post_divider为分频系数,详细说明请查阅驱动说明章节。 图 9 执行如下命令进行测试。 Target# ./flexspi_read -a 0x08000000 -s 4096 图 10 可以看到本次测试速率为114.89MB/s,与理论速率133MB/s接近。 备注:受限于测试板卡的硬件连接形式的影响,此速率下的误码率为99.8%。 1.3 案例关键代码 (1) main函数 图 11 (2) 地址映射。 图 12 (3) 读取数据。 图 13 (4) 校验数据。 图 14 (5) 打印数据。 图 15 1.4 FPGA工程关键代码 (1) 端口IO定义 flexspi_sclk和flexspi_ss0_n为输入信号,flexspi_data和flexspi_data为输出信号。 图 16 (2) 时钟输入信号flexspi_sclk设置为2倍频 图 17 (3) 数据发送 图 18 图 19 2 gst_pcie_enc案例 2.1 案例说明 本案例主要演示ARM Cortex-A53通过PCIe接口与FPGA进行通信,实现对CameraLink相机图像的采集、编码和显示。其中ARM端获取到的原始图像通过dma-buf机制,在采集、硬件编码和显示输出等功能中进行共享,可实现高效的图像数据“零拷贝”的录播方案。 FPGA端: (1) 采集CameraLink相机图像; (2) 通过XDMA IP实现为PCIe EP设备,RC端可通过PCIe接口访问FPGA端DDR以及对VDMA IP的寄存器进行配置。 ARM端: (1) 作为PCIe RC设备,配置VDMA IP将图像存储到FPGA DDR指定位置、将图像从FPGA DDR通过XDMA搬运到ARM端DDR; (2) 调用协处理器VPU进行H264硬件编码,并将编码后的数据存储到文件; (3) 编码的同时,通过HDMI显示实时图像。 程序工作流程框图如下所示: 图 20 2.2 案例测试 请参考下图,将创龙科技的TLCamerLinkF模块连接至TLK7-EVM评估板的FMC2接口,TLK7-EVM评估板J1跳线帽选择1.8V档位,以配置FMC IO的BANK电压为1.8V。将CameraLink相机的CL0通过数据线连接至TLCameraLinkF模块的CameraLink1接口。再将TLK7-EVM评估板的PCIe插到TLIMX8-EVM评估板的PCIe插槽上,使用HDMI线缆连接TLIMX8-EVM评估板的HDMI OUT接口至HDMI显示屏。 图 21 将该案例bin目录下的驱动文件xdma-video.ko拷贝至TLIMX8-EVM评估板文件系统中,并将案例bin目录下的.bit或.bin文件加载或固化到TLK7-EVM评估板。 评估板上电,可执行lspci命令检查PCIe连接是否正常。如不能获取到如下信息,请检查硬件连接和FPGA端是否正常运行。 Target# lspci 图 22 Target# insmod xdma-video.ko debug=1 备注:“debug=1”表示打印帧率信息,可根据实际需求选择是否配置。若需修改分辨率和帧率,可执行命令“insmod xdma-video.ko width=1280 height=1024 fps=60”,具体的分辨率和帧率大小,请以相机实际可支持范围为准,分辨率参数需和相机分辨率参数匹配,帧率参数仅作用于软件上相机参数,不影响实际的相机帧率。 图 23 执行如下命令进行图像的采集、编码和显示,编码后的test.264文件将保存在当前目录下。 Target# gst-launch-1.0 -v -e v4l2src device=/dev/video1 ! "video/x-raw, format=(string)NV12, width=(int)1280, height=(int)1024" ! tee name=t ! queue ! vpuenc_h264 ! h264parse ! filesink location=test.264 t. ! queue ! waylandsink 其中"/dev/video1"为设备节点,请以实际节点为准,1280和1024为图像的宽和高。 图 24 执行成功后可观察到如下输出,串口不停打印帧率,并在HDMI显示器上观看到实时图像。 备注:帧率显示为61fps,是由于CameraLink相机输出的并不是标准的60fps图像。 图 25 图 26 按下“Ctrl+C”停止录制后,将在当前目录生成test.264文件,并可观察到实际帧率为59.954fps。 图 27 执行如下命令播放编码后的视频,HDMI显示器显示对应图像。 Target# gst-play-1.0 test.264 图 28 图 29 播放结束后,将打印视频时长、帧率信息。 图 30 备注:由于码流文件中不包含播放帧率信息,因此在执行“gst-play-1.0 test.264”时未能按60fps进行播放。从串口打印信息可知,实际是以30fps进行播放,并且播放时长为录制时长的两倍。在录制时,将H264码流封装成MP4格式可解决此问题,因为封装成MP4格式时,播放帧率信息将被记录在MP4文件中。 执行如下命令,可将H264码流保存成MP4文件。 Target# gst-launch-1.0 -v -e v4l2src device=/dev/video1 ! "video/x-raw, format=(string)NV12, width=(int)1280, height=(int)1024" ! tee name=t ! queue ! vpuenc_h264 ! h264parse ! qtmux ! filesink location=test.mp4 t. ! queue ! waylandsink 图 31 图 32 注意:H264码流保存成MP4文件,程序可正常工作,录制的视频文件播放帧率正常,但系统会出现概率性的丢帧。为了避免这种情况,在实际的应用编程中,建议将MP4的保存功能另外建立一个pipeline进行,或改用其它开源MP4库进行开发。
  • 热度 8
    2021-8-26 09:25
    1456 次阅读|
    0 个评论
    目录 1. tl_led_flash案例 1.1 案例功能 1.2 操作说明 1.3 关键代码 2. tl_key_test案例 2.1 案例功能 2.2 操作说明 2.3 关键代码 3. tl_uart_rw案例 3.1 案例功能 3.2 操作说明 3.3 关键代码 遇到不少人新手小白问,前辈能不能分享几个Linux应用开发案例?之前一直都是在用win开发,现在想要尝试用Linux做开发等等一系列的问题。 应广大用户朋友需求号召,今天给大家分享基于创龙科技的TL335x-EVM( AM3352/AM3354/AM3358/AM3359)ARM Cortex-A8架构的一系列开发板,详细讲解Linux的应用开发案例,分别涵盖了tl_led_flash案例、tl_key_test案例、tl_uart_rw案例、tl_can_echo案例、tl_devmem_rw案例、tcp_udp_demos案例、Python开发案例等等。 如需重新编译Linux常用开发案例,请将对应案例src目录复制到Ubuntu工作目录下,进入src目录执行如下命令加载Linux Processor SDK环境变量,并执行make命令进行案例编译。编译完成后,将在当前目录下生成可执行文件。 Host# source /home/tronlong/ti-processor-sdk-linux-rt-am335x-evm-04.03.00.05/linux-devkit/environment-setup Host# make 如需重新编译Linux常用开发案例,请将对应案例src目录复制到Ubuntu工作目录下,进入src目录执行如下命令加载Linux Processor SDK环境变量,并执行make命令进行案例编译。编译完成后,将在当前目录下生成可执行文件。 Host# source /home/tronlong/ti-processor-sdk-linux-rt-am335x-evm-04.03.00.05/linux-devkit/environment-setup Host# make 图 1 Linux常用开发案例 1、 tl_led_flash案例 1.1案例功能 本案例通过向评估底板用户指示灯LED设备节点反复交替写入1、0数值,实现LED闪烁效果。LED点亮与熄灭时间均为0.5s。 程序流程如下图所示: ​图 2 LED设备节点为“/sys/class/leds/user-ledX/”目录下的brightness。 ​图 3 1.2操作说明 将本案例bin目录下的可执行程序tl_led_flash复制到评估板文件系统,并在可执行程序所在目录执行如下命令运行程序,即可看到评估底板LED以0.5s的时间间隔进行闪烁。同时, 串口终端打印系统全部LED设备信息和程序当前控制的LED设备信息。 Target# ./tl_led_flash -help Target# ./tl_led_flash -n 3 ​图 4 1.3关键代码 预定义LED数组。程序由此数组获取LED信息,数组信息必须为系统已有LED信息,否则程序运行报错。 ​图 5 2.LED亮灭操作和时间间隔。 ​图 6 2、tl_key_test案例 2.1案例功能 本案例通过监听用户按键KEY5设备节点状态, 检测按键事件 。 程序流程如下图所示: ​图 7 用户按键设备节点为“/dev/input/event1”。获取按键事件后进行按键键值匹配,再进行事件处理。 2.2操作说明 将本案例bin目录下的可执行程序tl_key_test复制到评估板文件系统,在可执行程序所在目录执行如下命令运行程序, 串口终端将打印提示信息。再按下评估板用户按键KEY5,程序将检测到按键事件,并打印按键状态信息。 Target# ./tl_key_test -help Target# ./tl_key_test -d /dev/input/event1 ​图 8 2.3关键代码 1.定义按键。 ​图 9 2.监听按键事件。 ​图 10 3.循环监听。 ​图 11 3tl_uart_rw案例 3.1案例功能 本案例主要实现 串口读写功能。 程序流程如下图所示: ​图 12 RS232、RS485串口设备节点分别为“/dev/ttyS0”、“/dev/ttyS1”。串口初始化时将设置波特率、模式、数据位、停止位等参数。通过设备文件描述符对串口进行读写操作。 3.2操作说明 使用RS232交叉串口母线、USB转RS232公头串口线,将评估板的RS232串口连接到PC机的USB接口,如下图所示。 ​图 13 将本案例bin目录下的可执行程序tl_uart_rw复制到评估板文件系统,进入可执行程序所在目录,执行如下命令查看程序参数信息。 Target# ./tl_uart_rw -h ​图 14 执行如下命令进行RS232串口数据读操作。 Target# ./tl_uart_rw -d /dev/ttyS0 -r -s 8 打开产品资料“4-产品资料\Tools\Windows\”目录下的串口调试工具SerialDebug.exe,打开PC机设备管理器,确认RS232串口COM端口号,并按照下图步骤进行操作或设置,从串口调试工具往RS232串口发送数据。调试串口终端将会打印从RS232串口读取到的数据。 ​图 15 ​图 16 执行如下命令进行RS232串口数据写操作,数据已在程序中定义。串口调试工具将会打印从RS232串口接收的数据。 Target# ./tl_uart_rw -d /dev/ttyS0 -w -s 8 ​图 17 ​图 18 使RS232转RS485模块、USB转RS232公头串口线,将评估板的RS485串口连接到PC机的USB接口,如下图所示。 RS232转RS485模块与评估板上RS485串口连接方法如下: RS232转RS485模块485+端子,连接评估板RS485串口A端子。 RS232转RS485模块485-端子,连接评估板RS485串口B端子。 RS232转RS485模块GND端子,连接评估板RS485串口GND端子。 执行如下命令进行RS458串口数据读写操作。RS485串口测试步骤与现象与RS232类似,命令中的设备节点由ttyS0改成ttyS1即可。 Target# ./tl_uart_rw -d /dev/ttyS1 -r -s 8 //RS485串口数据读操作 Target# ./tl_uart_rw -d /dev/ttyS1 -w -s 8 //RS485串口数据写操作 3.3关键代码 串口初始化函数。 ​图 20 2.串口读写函数。 ​图 21 ​图 22 3.回环测试。 ​图 23 4.相关逻辑。 ​图 24 由于开发案例篇幅过长,给大家分为多个版本,今天先讲tl_led_flash案例、tl_key_test案例、tl_uart_rw案例。感兴趣的朋友,欢迎点赞评论区留言和我探讨!
相关资源