热度 6
2022-10-25 08:59
796 次阅读|
0 个评论
飞凌嵌入式FET6254-C核心板基于TI Sitara™ AM62x系列工业级处理器设计开发,由于 AM6254采用了Cortex-A53+Cortex-M4F的处理核+控制核架构组合 ,因此引脚自然也是分为A核的引脚和M核的引脚。 如果A核的引脚不够用怎么办?可以把M核的引脚用作A核吗?答案是肯定的。 今天小编将为大家分别介绍这颗核心板的GPIO引脚信号描述、A核使用A核的引脚、用户空间如何控制GPIO以及A核如何调用M核的引脚并复用成GPIO。 关于AM6254的GPIO信号描述 我们通过GPIO可以了解有关AM6254这颗CPU的引脚框架,CPU手册目录: 用户资料/原厂资料/SPRSP58_AM62x_DS_AI_2_16_2022 在 6.3.10GPIO 章节有如下描述: AM6254的GPIO信号一共有两大组:分别是 MAINDomain 和 MCUDomain, 其中MAINDomain是A核的GPIO,有两组GPIO0和GPIO1,分别是92和52个引脚。 MCUDomain是M核的GPIO,有一组GPIO0,24个引脚。 6.2Pin Attributes 章节描述了引脚的控制寄存器PADCONFIG名称以及地址,以及每个引脚的属性。例如B13引脚,引脚名称是SPI0_D0,寄存器名称为PADCONFIG112,寄存器地址为0x000F41C0,可以复用的功能如下: Linux系统可以使用devmem2查看寄存器值。 root@ok6254:~# devmem2 0x000F41C0/dev/mem opened.Memory mapped at address 0xffff969c0000.Read at address0x000F41C0(0xffff969c41c0): 0x00010007root@ok6254:~# 5.1.2.3Pad Configuration Register Functional Description章节。 A核使用A核的引脚 了解了引脚信号的描述,先不要着急,接下来先熟悉一下A核的引脚复用方法,以将SPI_D0用作GPIO为例,设备树配置修改如下: arch/arm64/boot/dts/ti/OK6254-C.dts 修改完成后编译设备树,会在Image目录下生成镜像,然后替换dtb镜像,替换目录:/boot/OK6254-C.dtb。执行sync保存后重启。 用户空间如何控制GPIO 为了查看是否修改成功,可以使用如下命令查看GPIO使用情况 root@ok6254:~#cat /sys/kernel/debug/gpiogpiochip2: GPIOs 314-401, parent:platform/601000.gpio, 601000.gpio:gpio-330 ( |led1 ) out logpio-331 ( |led2 ) out logpio-332 ( |led3 ) out logpio-333 ( |led4 ) out logpio-336 ( |fixed-regulator-rgb ) out lo gpiochip1: GPIOs 402-488, parent:platform/600000.gpio, 600000.gpio:gpio-433 ( |net-5g-rst ) out lo ACTIVE LOWgpio-437 ( |phy_rstn ) out logpio-438 ( |id ) inlogpio-440 ( |RT9186 ) out logpio-441 ( |fixed-regulator-lvds) out logpio-442 ( |phy_rstn ) out logpio-444 ( |heartbeat ) out logpio-473 ( |regulator-6 ) out lo gpiochip0: GPIOs 489-511, parent:platform/4201000.gpio, 4201000.gpio:root@ok6254:~# 方式1: 使用内核的gpio-leds驱动 root@ok6254:~# cd /sys/class/leds/root@ok6254:/sys/class/leds#lsheartbeatled1led2 led3mmc0::mmc1::mmc2::root@ok6254:/sys/class/leds# 进入其中一个led1 root@ok6254:/sys/class/leds#cd led1/root@ok6254:/sys/class/leds/led1#lsbrightnessdevice max_brightnesspowersubsystemtriggerueventroot@ok6254:/sys/class/leds/led1# 设备树默认配置触发方式trigger为timer,此时的led是按照定时亮灭的,可以改成手动控制。 brightness点亮root@ok6254:/sys/class/leds/led1# 方式2: 使用/sys/class/gpio, 注意,该方式不需要再设备配置 leds 节点 ,只需要配置引脚即可。如下是将gpmc_ad15引脚配置成GPIO。 关于gpiochip的计算公式如下: Gpmc_ad15的引脚是gpio0_30,chip值为402+30=432,导出gpio: /sys/class/gpio/export 设置方向: /sys/class/gpio/gpio432/direction 设置高低电平: /sys/class/gpio/gpio432/value 拉低root@ok6254:~# A核如何调用M核的引脚 并复用成GPIO? 设备树配置: &mcu_pmx0 {mymcugpio1_pins_default:mymcugpio1-pins-default { pinctrl-single,pins= ; };}; &mcu_gpio0 { pinctrl-names ="default"; pinctrl-0= ; status = "okay";}; 使用gpio-leds驱动的配置,在leds节点中添加如下(若您正在使用手机阅读,建议您关掉“深色模式”): ---a/arch/arm64/boot/dts/ti/OK6254-C.dts+++b/arch/arm64/boot/dts/ti/OK6254-C.dts@@ -166,7 +166,7 @@ compatible= "gpio-leds"; pinctrl-names= "default"; pinctrl-0= ;-+ pinctrl-1 = ; led-0 { label= "heartbeat"; gpios= ;@@ -206,6 +206,14 @@ led-pattern= ; default-state= "on"; };+ + led-5 {+ label = "led5";+ gpios = ;+ linux,default-trigger = "timer";+ led-pattern = ;+ default-state = "on";+ }; }; 控制方式与前面提到的方式1和方式2一样 ,至此GPIO的复位完成。 当然其他接口I2C、CAN、SPI、UART也是类似,想要了解更详细的使用方式,大家可以关注后续的应用笔记。点击下图进入飞凌嵌入式官网,了解更多产品详情。