tag 标签: TI

相关博文
  • 2025-7-3 18:12
    0 个评论
    本文将介绍基于米尔电子MYD-YM62X开发板(米尔基于TI AM62开发板)的部署流媒体服务实现监控功能方案的开发测试。 摘自优秀创作者-HonestQiao 米尔基于TI AM62开发板 米尔-TI AM62x开发板除了可以用官方的CSI摄像头,还可以直接使用第三方的USB摄像头,我手头正好有几个个USB摄像头: 经过实测,可以很好的在米尔-TI AM62x开发板上使用。 这篇分享,就是在这块开发板上部署流媒体服务,通过USB摄像头实现监控功能。 一、软件准备 要在Linux上面部署流媒体服务,mjpg-streamer是最合适的。 首先,在应用开发环境中,进行 mjpg-streamer 跨平台编译,具体步骤如下: git clone cd mjpg-streamer/mjpg-streamer-experimental find -name "Makefile" - exec sed -i "s/CC = gcc/#CC = gcc/g" {} ; grep -rn 'CC = gcc' * make clean make file mjpg_streamer # mjpg_streamer: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID =48d2a902d1672913291a75a055d224d340d77649, for GNU/Linux 3.14.0, with debug_info, not stripped 上面代码步骤中,使用find+sed,来替换Makefile中的CC配置。 因为应用开发环境提供了CC变量,可以直接使用。 将最终编译出来的mjpg_streamer,部署到开发板上备用,具体如下: ssh root @192 . 168.10 . 11 "mkdir ~/mjpeg_server/" scp mjpg_streamer root @192 . 168.10 . 11 :~/mjpeg_server/ scp *.so root @192 . 168.10 . 11 :~/mjpeg_server/ 最终,开发板上部署的文件如下: 二、摄像头信息获取 米尔官方的系统,提供了v4l2工具,可以直接使用。 1. 查看当前的摄像头设备: v4l2-ctl --list-devices 可以看到,找到了USB接口的摄像头,对应的设备地址为 /dev/video0 2. 查看摄像头的支持的格式类型 v4l2-ctl --list-formats -d /dev/video0 3. 查看摄像头的具体参数: v4l2-ctl -D -d /dev/video0 三、流媒体服务启用 前面安装好了mjpeg_server,现在可以启用测试了: cd ~/mjpg_streamer ./mjpg_streamer -i "input_uvc.so -d /dev/video0 -n -r 640x480 -f 10" -o "output_http.so -p 8081 -w ./ -c test:test123" 上述命令中,使用/dev/video0做为输入,分辨率为640x480,输出端口为8081。 为了安全起见,设置了一个简单的账户密码test/test123。实际使用中,应该使用复杂的用户名和密码。 成功后,显示如下表示成功: 启动成功后,就可以通过网址 http://192.168.10.11:8081/?action=stream 进行访问了。其中192.168.10.11为开发板的地址。 整体环境如下: 四、总结 从实测视频可以看到,视频流的延迟非常非常低低,而且也非常的流畅,没有丝毫的卡顿。 另外,也看了一下当时的CPU负载: 资源占用非常低。 不过,有一点小小遗憾的是,该开发板暂时还不支持双USB摄像头,不然可以上多个一起玩了。 总的来说,虽然米尔-TI AM6231属于米尔-TI AM62x中三个型号的最低配版本,但是做一下工业基础应用,完全足够了。
  • 2025-4-24 14:33
    0 个评论
    B y Toradex 胡珊逢 简介 Toradex 为其产品使用的软件系统如 Linux 提供了诸多的安全功能,例如 Secure Boot、分区加密、OP-TEE 等,帮助用户应对安全合规。这些功能可以通过在 Yocto Project 中添加由 Toradex 开发的 meta-toradex-security layer 被轻松使用。我们将在接下的几篇文章中介绍如何使用这些功能。本次我们首先介绍如何在使用 Yocto Project 生成安装镜像时创建一个独立的分区,这为后面的分区加密做好准备。 Yocot Project 环境搭建和配置 参考 Build a Reference Image with Yocto Project/OpenEmbedded 页面的说明,我们使用最新的 Linux BSP 7 版本。除了使用默认的 repo 外,我们还可以使用国内站点的 repo 工具,便于下载。 $curl-Lhttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo-orepo $chmod+xrepo $exportREPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' 下载编译 BSP 7 镜像所使用的 mainifest 文件。 $ repo init -u git://git.toradex.cn/toradex-manifest.git -b scarthgap-7.x.y -m tdxref/default.xml $ repo sync $ . export 执行完 `repo sync` 命令后,可以在 layers 目录下发现 Yocto Project 使用的 recipes 文件。在 layers 目录下需要添加 meta-toradex-security 以及其依赖的 meta-security layers。 $ cd layers $ git clone -b scarthgap-7.x.y https://github.com/toradex/meta-toradex-security.git $ git clone -b scarthgap git://git.yoctoproject.org/meta-security 在 build/conf/bblayers.conf 的末尾增加 meta-toradex-security 和 meta-security。这样在稍后的 bitbake 编译时才能够使用这些 recipes。 ${TOPDIR}/../layers/openembedded-core/meta \ ${TOPDIR}/../layers/meta-toradex-security \ ${TOPDIR}/../layers/meta-security \ 在 build/conf/local.conf 的末尾添加下面内容。 INHERIT += "tdx-tezi-data-partition" 在创建和挂载分区时, local.conf 可以使用下面变量改变分区名字、挂载路径、是否自动挂载以及使用其他的挂载参数等,可以根据需要使用。 变量 描述 默认值 TDX_TEZI_DATA_PARTITION_TYPE 数据分区文件系统类型。可用的值为 ext2 、 ext3 、 ext4 、 fat 和 ubifs 。 支持的值仅限于 Toradex Easy Installer 所支持的范围 ext4 TDX_TEZI_DATA_PARTITION_LABEL 用于格式化和挂载数据分区的标签 DATA TDX_TEZI_DATA_PARTITION_AUTOMOUNT 设置为 1 以在启动时自动挂载数据分区,或设为 0 禁用自动挂载; 当设置为 -1 时,该分区甚至不会出现在 fstab 中(需通过其他方式挂载) 如果使用了 tdx-encrypted 类为 -1 ,否则为 1 TDX_TEZI_DATA_PARTITION_MOUNTPOINT 数据分区应挂载的目录 /data TDX_TEZI_DATA_PARTITION_MOUNT_FLAGS 用于挂载数据分区的标志。有关可用挂载标志的更多信息, 请参阅 mount 手册页。 rw,nosuid,nodev,noatime, errors=remount-ro 模块情况下将在 /data 目录挂载一个 EXT4 格式的分区,在该分区上可以存放用户的数据。 编译镜像 完成上面的配置后,即可使用 bitbake 命令编译镜像。例如本次测试将编译用于 Verdn AM62 模块的 minimal image。 $ MACHINE=verdin-am62 bitbake tdx-reference-minimal-image 安装镜像 虽然在 Yocto Project 中规划了一个 /data 下的分区,但该分区还是需要在模块上安装镜像时,由 Toradex Easy Installer 在模块的 eMMC 上创建。在生成镜像的安装文件 image.json 可以看到如下内容。在 RFS 系统分区后会创建一个 DATA 分区。 { "partition_size_nominal": "512", "partition_type": "83", "want_maximised": true, "content": { "label": "DATA", "filesystem_type": "ext4", "mkfs_options": "-E nodiscard", "filename": "" } } 检查分区情况 安装完毕重启进入系统后,使用 mount 命令可以看到 /dev/mmcblk0p3 被挂载到了 /data 目录下。 /dev/mmcblk0p3 on /data type ext4 (rw,nosuid,nodev,noatime,errors=remount-ro) 在 /etc/fstab 中,将 LABEL 为 DATA 的分区在启动时自动挂载。LABEL 名字是前面表格中 TDX_TEZI_DATA_PARTITION_LABEL 参数的默认值。 root@verdin-am62-15415684:/data# cat /etc/fstab ... LABEL=DATA /data auto rw,nosuid,nodev,noatime,errors=remount-ro,auto 0 0 在 image.json 中,RFS 和 DATA 分区都设置了 "want_maximised": true,所以这两个分区会平分 eMMC 上剩余的空间,这里基本约为 3GB。 root@verdin-am62-15415684:/data# df -h Filesystem Size Used Available Use% Mounted on /dev/root 3.4G 207.0M 3.0G 6% / ... /dev/mmcblk0p3 3.4G 28.0K 3.2G 0% /data 总结 通过 meta-toradex-security,用户可以在编译镜像时轻松规划分区,并在运行时将其自动挂载。更多来自 meta-toradex-security 实用功能,我们将在后续文章介绍。
  • 热度 2
    2024-10-25 10:42
    264 次阅读|
    0 个评论
    智能运动控制系统是自动化领域中的一个重要分支,主要用于对机械运动部件的位置、力矩、速度、加速度等进行实时的控制管理,能够实现对工业机械臂、传送带、自动化装配线等设备的精确控制,以提高生产效率、降低能耗并保障生产安全。 它融合了精确反馈、先进感知、高性能控制和无缝连接技术,能够实现高精度、低延时的自动控制,在现代社会的生产和生活中具有重要意义。 该系统需要处理大量的传感器数据、执行复杂的运动算法,并实时响应外部指令,因此对系统的主控提出了较高的要求。在这里,推荐客户使用飞凌嵌入式FET6254-C核心板作为智能运动控制系统的主控设备。 基于TI Sitara™ AM62x系列处理器设计开发的飞凌嵌入式FET6254-C核心板,以其独具优势的多核异构架构、丰富的接口资源和高性能处理能力,为智能运动控制系统提供了理想的主控解决方案。 1 高性能主控,更高效 FET6254-C核心板作为系统的核心,负责数据处理、算法运算和指令下发,四核Cortex-A53+Cortex-M4F的多核异构架构确保了高性能计算与实时控制的高效结合。 不仅能够实现对运动轨迹的高精度规划和实时调整,确保设备的运动精度和稳定性,还能快速处理传感器数据,实现复杂的运动算法和故障诊断,提高系统的智能化水平。 2 功能接口丰富,更全能 飞凌嵌入式FET6254-C核心板将处理器的全部功能引出,扩展能力更全能。通过I2C、SPI等接口,可连接各类传感器(如位置传感器、速度传感器、力传感器等),实时采集设备状态信息;利用PWM、GPIO等接口,直接控制电机驱动器、电磁阀等执行机构,实现精确的运动控制。 值得注意的是,FET6254-C核心板原生支持3路CAN-FD,传输速度至高可达5Mbps,可高速、稳定地接入到工业网络系统中CAN-FD等通信接口,为工业自动化和车载应用提供功能支撑。 此外,FET6254-C核心板还支持TI处理器特有的通用存储控制器接口GPMC,数据读写速率高,可达100MB/s,支持多路片选,配置更加灵活,同时可以提供多种与外设相连的方法,可以和宽范围的外部设备通信。 3 人机交互能力更出众 FET6254-C核心板拥有卓越的显示能力,可支持双屏异显、三路显示,搭配上设计直观的操作界面,方便操作人员监控设备状态、调整参数和下达指令。 基于FET6254-C核心板的智能运动控制系统,凭借其高精度、高效率、实时性和可扩展性,为工业自动化领域提供了强大的技术支持。该系统不仅能够提高生产效率、降低能耗,还能提升生产线的智能化水平,为企业的转型升级提供有力保障。
  • 热度 3
    2024-10-11 15:15
    680 次阅读|
    0 个评论
    By Toradex胡珊逢 简介 CODESYS 是基于 IEC 61131-3 的 PLC 开发工具,在工业控制、交通等领域中有着广泛的应用。文章将介绍如何在 Toradex 采用 TI AM62 SoC 的 Arm 计算机模块 Verdin AM62 使用评估版本的 CODESYS。 硬件介绍 Verdin AM62使用 TI AM623/AM625 处理器,具有最多 4 个主频 1.4GHz 的 Cortex-A53 内核,以及一个 400MHz 主频的 M4F 核心。内存采用 LPDDR4,从 512 MB 到 2 GB 可供选择。eMMC 从 4~16 GB。模块采用 SODIMM DDR4 标准,提供两路千兆以太网、CAN、MIPI DSI 显示、I2C、SPI、UART 等接口。 BSP 配置 CODESYS 分为在电脑端使用 IDE,在 GUI 中开发 PLC 应用,和在设备上运行时 runtime 软件,例如在 Verdin AM62 上的 CODESYS Control for Linux ARM SL。CODESYS 的运行需要使用 RT-Linux 内核。Toradex 发布的 Linux BSP 采用Yocto Project 编译,可以在生成 BSP 时直接为 Linux 内核打上实时补丁。修改 local.conf 文件。 DISTRO="tdx-xwayland-rt" 为了尽可能保证内核时实时性,可以裁减 BSP 中的 wayland 显示、Qt demo 等组件,添加用于测试实时性能的 cyclictest。 IMAGE_INSTALL: remove = " weston wayland-qtdemo-launch-cinematicexperience" DISTRO_FEATURES: remove = "wayland" IMAGE_INSTALL: append = " rt-tests" 最后使用bitbake命令编译镜像,并使用Toradex Easy Installer将其烧录到 Verdin AM62 模块。 bitbake tdx-reference-multimedia- image CODESYS IDE 安装 从 CODESYS 网站下载IDE 开发工具,安装成功后再下载 64bit 的CODESYS Control for Linux ARM SL。这是后缀为 package 的文件,需要在 CODESYS IDE 中按照下图打开 CODESYS Installer 导入 package 文件进行安装。 安装完毕后可以看到以下目录C:\Program Files\CODESYS 3.5.20.20\CODESYS\CODESYS Control for Linux ARM64 SL。 Verdin AM62 软件安装 在 Verdin AM62 上需要安装来自C:\Program Files\CODESYS 3.5.20.20\CODESYS\CODESYS Control for Linux ARM64 SL\Delivery\linuxarm64 目录下的 codesyscontrol_linuxarm64_4.13.0.0_arm64.ipk。将其复制到开发板后运行下面命令安装。 opkginstallcodesyscontrol_linuxarm 64_4.13.0 . 0 _arm64.ipk 在 Dependency 目录下还有一个 deb 格式的 codemeter-lite 安装文件。如有你已经有 CODESYS 的授权密钥,安装 codemeter 后,上面安装的 codesyscontrol 将不受 30 分钟的试用时间限制。由于 Verdin AM62 默认不使用 Debian 包管理系统,可以参考CODESYS 的网页说明,手动解压 deb 安装包后复制相关文件。执行下面命令即可启动 codesysctonrol, ps aux|grep codesys 查看运行情况。当 codesyscontrol 运行后,在同一个网络中的电脑上的 CODESYSY IDE 就可以发现该设备。 /etc/ init .d / codesyscontrolstart ps aux|grepcodesys root 710 9.2 1.9 892328 39456 pts /0SLl08:040:00/ opt /codesys/ bin /codesyscontrol.bin/ etc /codesyscontrol/ CODESYSControl .cfg PLC 应用开发 打开 IDE 后点击新建项目,设置项目名称和保存路径。 Device 选择 CODESYS Control for Linux ARM64 SL,这是上面安装的组件。 点击 Scan Network 扫面本地网络,发现 Verdin AM62 设备。 首次发现设备时需要设置一个用户名和密码,IDE 将会使用该账户和设备通信。 创建完毕后使用该帐号登录。 然后就可以看到该设备,后面的 PLC 应用将这上面调试和运行。 具体的 PLC demo 编写可以参考我们开发者网页的说明。开启 web visu 功能后,可以连接到 Verdin AM62 的 IP,在浏览器中查看 PLC 运行情况。 Verdin AM62 实时性能测试 在使用 Yocto Project 编译镜像时已经添加了 rt-tests 工具,下面使用 cyclictest 测试实时性能。测试时把 AM62 4 个核心的时钟均设置到最高的 1.4 GHz。 # echo /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # cpufreq-info|grepcurrent current policy:frequencyshouldbe within 200 MHz and 1.40 GHz. currentCPUfrequency is 1.40 GHz(asserted by call to hardware). current policy:frequencyshouldbe within 200 MHz and 1.40 GHz. currentCPUfrequency is 1.40 GHz(asserted by call to hardware). current policy:frequencyshouldbe within 200 MHz and 1.40 GHz. currentCPUfrequency is 1.40 GHz(asserted by call to hardware). current policy:frequencyshouldbe within 200 MHz and 1.40 GHz. currentCPUfrequency is 1.40 GHz(asserted by call to hardware). stress-ng 把所有核心的负荷加满,使用 cyclictest 持续运行 1 个小时并统计结果。 stress-ng -c 4 --cpu-method all & \ cyclictest -m -Sp98 -D1h -h400 -i200 - q output 总结 文章介绍了如何在 Verdin AM62 上使用 CODESYS,该方法同样也适用于其他 Toradex Arm 64bit 的模块,如 iMX8 SoC。关于 CODESYS 实时性调教,可以从 BSP、内核裁减,CPU 亲和性设置,中断优化等方面进行,具体参考下面文档。 参考: https://www.ti.com/lit/pdf/SPRADH0
  • 热度 2
    2024-9-18 18:07
    758 次阅读|
    0 个评论
    B y Toradex 胡珊逢 简介 Verdin AM62 是 Toradex 基于 TI AM623/AM625 SoC 的 Arm 计算机模块。它最多提供 4 个 A53 和 1 个 M4F 处理器。这是 TI 基于其 K3 平台的处理器,虽然和 NXP 的 iMX8M Mini/Plus 都使用 A53 核心,但是由于架构不同,在 Linux 系统中配置外设的方式也不同。文章将介绍如何配置 AM62 的引脚复用关系。 硬件介绍 Verdin AM62 所使用的 AM623/AM625 处理器的 GPIO 控制器如下图所示。GPIO 控制器根据不同的处理器可能有多个模块,AM623/AM625 拥有一个 MCU_GPIO0,一个 GPIO0 和一个 GPIO1 共三个模块。每个模块有 9 个 bank,每个 bank 有 16 个引脚,所以理论上最多有 3x9x46 = 432 个引脚。但 AM623/AM625 SoC 并不能使用所有引脚,SoC 实际可用的为 198 个引脚。Verdin AM62 模块并没有把 SoC 的引脚都引出,因而可用的引脚少于 198。 Device Tree 配置 在写本文章时,Verdin AM62 使用toradex_ti-linux-6.1.y分支内核。每个 GPIO 根据用途的不同,相应的配置分布在多个 device tree 文件中。如下图,k3-am62-mcu.dtsi 和 k3-am62-main.dtsi 中定义了三个 GPIO 控制器模块以及对应的物理地址,k3-am62-verdin.dtsi 中包含每个引脚的具体配置。三个 GPIO 控制器分为两种,MCU_GPIO 和 GPIO0/1,它们可以使用各自专门的函数来配置所控制的引脚。&mcu_pmx0 和 &main_pmx0 分别使用 AM62X_MCU_IOPAD 和 AM62X_IOPAD 配置。下面将介绍如何修改和使用 mcu_gpio0,main_gpio0 和 main_gpio1 模块所控制的引脚。 我们分别选择来自如下三个不同 IO 控制器的引脚,分别是 SOIDMM 19、21、61。 查看Verdi AM62 Datatsheet的 Table 12: Alternate functions 可以确定对应引脚的 SoC Ball ID 和 SoC ball name。在 TIAM623/AM625处理器的 Datasheet 中 Table 6-1. Pin Attributes 可以找到对应 SoC Ball ID 的 PADCONFIG Address。有了这些信息就能够在 Device tree 中进行配置。 SODIMM SoC Ball ID SoC ball name PADCONFIG Address ALT7 61 A6 MCU_UART0_CTSn 0x0408401C MCU_GPIO0_7 21 U24 GPMC0_AD15 0x000F4078 GPIO0_30 19 A14 SPI0_CLK 0x000F41BC GPIO1_17 SODIMM 19 k3-am62-verdin.dtsi 中提供了默认引脚的配置。Toradex 在代码中做了详细的注释,例如以 SODIMM 19 为关键字搜索,可以找到该引脚的默认配置,这里发现关于 SODIMM 19 的配置有两个。SODIMM 19 属于 GPIO1 控制器,所以该配置是 main_pmx0 下面的子节点,并使用 AM62X_IOPAD 函数进行配置。A14(Ball ID)的 PADCONFIG 地址是 0x000F41BC,对应的掩码是 0x1fff,AM62X_IOPAD 使用 0x01bc。 PIN_OUTPUT/PIN_INPUT 表示把该引脚配置为输出/输入状态。数字 2 表示该引脚使用第二个复用配置,即当作 PWM1_A 使用。数字 7 表示该引脚使用第七个复用配置,即当作 GPIO 使用。引脚所有可用的复用关系可在 Verdi AM62 Datatsheet Table 12: Alternate functions 查看。AM62 处理器的引脚最多可以有 10 个复用配置可选,在 Table 12 中由 ALT0 到 ALT9 表示。部分引脚可能少于 10 个复用配置。后面的注释中,A14 为 SoC Ball ID,SPI0_CLK 是 SoC Ball Name,GPIO1_17 指当前选择第七个复用配置,作为 GPIO 对应的编号 GPIO1_17。当配置为 PWM 功能时就由 GPIO1_17 改为 EHRPWM1_A。在修改为其他复用配置后,建议也对应修改注释,便于理解代码。 /* Verdin PWM_3_DSI */ pinctrl_epwm1_a: main-epwm1a-pins- default { pinctrl- single ,pins = < AM62X_IOPAD ( 0 x01bc, PIN_OUTPUT, 2 ) /* (A14) SPI0_CLK.EHRPWM1_A */ /* SODIMM 19 */ ; }; pinctrl_pwm3_dsi_gpio: main-gpio1 -17 -pins- default { pinctrl- single ,pins = < AM62X_IOPAD ( 0 x01bc, PIN_INPUT, 7 ) /* (A14) SPI0_CLK.GPIO1_17 */ /* SODIMM 19 */ ; }; 上面 AM62X_IOPAD 中配置的 PIN_OUTPUT/PIN_INPUT 将设置 PADCONFIG 的寄存器。PIN_OUTPUT/PIN_INPUT 在 k3-pinctrl.h 定义。 /* Only these macros are expected be used directly in device tree files */ # define PIN_OUTPUT (INPUT_DISABLE | PULL_DISABLE) # define PIN_OUTPUT_PULLUP (INPUT_DISABLE | PULL_UP) # define PIN_OUTPUT_PULLDOWN (INPUT_DISABLE | PULL_DOWN) # define PIN_INPUT (INPUT_EN | PULL_DISABLE) # define PIN_INPUT_PULLUP (INPUT_EN | PULL_UP) # define PIN_INPUT_PULLDOWN (INPUT_EN | PULL_DOWN) PIN_OUTPUT/PIN_INPUT 定义的值最终被写入 Pad Configuration 寄存器,具体的说明可以参考 AM623/625 的Technical Reference Manual中 Table 6-2045. Description Of The Pad Configuration Register Bits 相关说明。 根据 pinctrl_epwm1_a 查找,发现该引脚被分配到 epwm1,为了将 SODIMM 19 作为 GPIO 使用,在device tree 需要确保 epwm1 处于 disabled 状态。 /* Verdin PWM_3_DSI */ &epwm1 { pinctrl-names = "default" ; pinctrl-0 = ; status = "disabled" ; }; 如果使用 k3-am625-verdin-nonwifi-dev.dtb,那么在 k3-am62-verdin-dev.dtsi 中需要将 epwm1 禁用。 /* Verdin PWM_3_DSI */ &epwm1 { status = "disabled" ;}; 在 k3-am62-verdin.dtsi 的 main_gpio1 可以为 GPIO1 控制器的引脚添加 line-name,这样在 Linux 中 libgpiod 就能够使用更直观 line-name 直接访问引脚。gpio-line-names 从 gpio1_0 开始为每个引脚添加 line-name,gpio1_17 则设置为 SODIMM_19。 &main_gpio1 { gpio-line-names = "" , /* 0 */ "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , /* 10 */ "" , "" , "" , "" , "SODIMM_15" , "SODIMM_16" , "SODIMM_19" , 由于 SOIDMM 19 属于 GPIO1 控制器,在 k3-am62-verdin-dev.dtsi 中需要添加 main_gpio1 节点并将 pinctrl_pwm3_dsi_gpio 添加到节点中。 &main_gpio1 { pinctrl-names = "default" ; pinctrl-0 = ;}; SODIMM 21 SODIMM 21 也是类似的方法。在 Verdi AM62 Datatsheet Table 12: Alternate functions 中看到 SOIDMM 21 对应的 SoC Ball ID 为 U24,第七复用配置 ALT7 可以作为 GPIO 功能,编号 GPIO0_30,这属于 GPIO0 控制器。TIAM623/AM625处理器的 Datasheet 中 Table 6-1. Pin Attributes 中找到 U24 对应的 PADCONFIG Address 是 0x000F4078。因此,在 AM62X_IOPAD 使用 0x0078。 /* Verdin DSI_1_BKL_EN */ pinctrl_dsi1_bkl_en: main-gpio0 -30 -pins- default { pinctrl- single ,pins = < AM62X_IOPAD ( 0 x0078, PIN_INPUT, 7 ) /* (U24) GPMC0_AD15.GPIO0_30 */ /* SODIMM 21 */ ; }; 在 main_gpio0 中,GPIO0_30 的 line-name 已经被定义为 SODIMM_21。 &main_gpio0 { gpio - line - names = "" , "SODIMM_76" , "SODIMM_21" , /* 30 */ SODIMM 21 属于 GPIO0 控制器,在 k3-am62-verdin-dev.dtsi 中,将 pinctrl_dsi1_bkl_en 添加到 main_gpio0 节点中。 &main_gpio0 { pinctrl-names = "default" ; pinctrl-0 = , , , , , ;}; SODIMM 61 在 Verdi AM62 Datatsheet 的 Table 12 发现 SODIMM 61 对应 ALT7 为 MCU_GPIO0_7,SoC Ball ID 为 A6,SoC ball name 为 MCU_UART0_CTSn。在 TI AM623/AM625 处理器的 Datasheet 中 Table 6-1 中对应的 PADCONFIG Address 是 0x0408401C。使用 0x010c 作为关键字在 k3-am62-verdin.dtsi 检索只发现下面配置,但该子节点属于 main_pmx0 而非为 mcu_pmx0。所以在 k3-am625-verdin-nonwifi-dev.dtb 并未配置 SODIMM 61。那么就需要在 k3-am62-verdin.dtsi 添加相关配置。 pinctrl_sdhci2: main-mmc2-pins- default { pinctrl- single ,pins = < AM62X_IOPAD ( 0 x120, PIN_INPUT, 0 ) /* (C24) MMC2_CMD */ /* WiFi_SDIO_CMD */ AM62X_IOPAD ( 0 x118, PIN_INPUT, 0 ) /* (D25) MMC2_CLK */ /* WiFi_SDIO_CLK */ AM62X_IOPAD ( 0 x114, PIN_INPUT, 0 ) /* (B24) MMC2_DAT0 */ /* WiFi_SDIO_DATA0 */ AM62X_IOPAD ( 0 x110, PIN_INPUT, 0 ) /* (C25) MMC2_DAT1 */ /* WiFi_SDIO_DATA1 */ AM62X_IOPAD ( 0 x10c, PIN_INPUT, 0 ) /* (E23) MMC2_DAT2 */ /* WiFi_SDIO_DATA2 */ 在 mcu_pmx0 中把 SODIMM 61 配置作为子节点添加进去。注意,由于 SODIMM 61 属于 MCU_GPIO 控制器,所以这里使用 AM62X_MCU_IOPAD 来配置。 &mcu_pmx0 { /* Verdin GPIO_9 */ pinctrl_gpio_9: mcu-gpio0 -7 -pins- default { pinctrl-single,pins = < AM62X_MCU_IOPAD ( 0x001c , PIN_INPUT, 7 ) /* (A6) MCU_UART0_CTSn.MCU_GPIO0_7 */ /* SODIMM 61 */ ; }; 在 &mcu_gpio0 中第八个位置添加 MCU_GPIO0_7 对应的 line-name 为 SODIMM_61。其中第一行 SODIMM_244 对应的是 MCU_GPIO0_0,第二行 SODIMM_206 对应的是 MCU_GPIO0_1。 &mcu_gpio0 { gpio-line-names = "SODIMM_244" , "SODIMM_206" , "SODIMM_208" , "SODIMM_210" , "SODIMM_212" , "" , "" , "SODIMM_61" , 在 k3-am62-verdin-dev.dtsi 中的 mcu_gpio0 节点中添加前面配置的 pinctrl_gpio_9。 &mcu_gpio0 { pinctrl-names = "default" ; pinctrl-0 = , , , , , ;}; 引脚测试 上面配置完成后,重新编译 device tree,并部署到的开发板上。 make ti/k3-am625-verdin-nonwifi-dev.dtb 重启后使用gpioinfo命令找到上面配置三个引脚在 Linux 系统中对应的 bank 和 line 编号。 gpiochip1 - 24 lines : line 7 : "SODIMM_61" unused input active-high gpiochip2 - 92 lines : line 30 : "SODIMM_21" unused input active-high gpiochip3 - 52 lines : line 17 : "SODIMM_19" unused input active-high 下面三个命令分别可以把对应的引脚拉高或拉低。 root @verdin - am62 : ~ # gpioset 3 17=1 root @verdin - am62 : ~ # gpioset 2 30=1 root @verdin - am62 : ~ # gpioset 1 7=1 root @verdin - am62 : ~ # gpioset 3 17=0 root @verdin - am62 : ~ # gpioset 2 30=0 root @verdin - am62 : ~ # gpioset 1 7=0 除了像上面直接在 user space 控制 GPIO 的状态,驱动中也可以控制相关引脚。例如在 k3-am62-verdin-dev.dtsi 的根节点下添加一个 LED 子节点并使用 SOIDMM 61 来控制。首先,需要把 pinctrl_gpio_9 从原来 &mcu_gpio0 删除,因为这里该引脚不再作为普通的 GPIO 使用,而是用于 LED 驱动。在 gpios 参数中使用 &mcu_gpio0 7 来引用 SODIMM 61。如果是 main_gpio0 控制器下的 SODIMM 21,则对应需要使用 &main_gpio0 30 来引用。 gpio-leds { compatible = "gpio-leds" ; pinctrl-names = "default" ; pinctrl-0 = ; led-yellow { gpios = <&mcu_gpio0 7 ; default-state = "on" ; label = "status" ; }; }; 总结 文章就 AM623/625 SoC 介绍了如何在 Device tree 中配置和使用 GPIO,需要注意区分 GPIO 来自哪个控制器,并使用对应的函数和引用符号。
相关资源