nvidia xavier nx平台PWM模块调试

free-jdx 2021-05-14 14:43:43 8612
1. 前言

使用GPIO 7作为PWM8和GPIO 14作为PWM 7
在发布32.4.1版本上使用Jetson_Xavier_NX_Module_Pinmux_Configuration_Template。
提到的引脚作为gpio工作,但我无法将它们配置为pwm。

2.修改cfg文件

不像Jetson Nano,
Xavier NX使用cfg文件(tegra19x-mb1-pinmux-p3668-a01.cfg)
来控制pinmux而不是dtb。

我能够看到GPIO14作为PWM工作,而我不能看到GPIO7作为PWM。
因此,我将GPIO14的cfg设置复制到tegra19x-mb1-pinmux-p3668-a01.cfg中的GPIO7中。

从电子表格创建dts文件后,请检查下面路径下的README文件,以使用python脚本生成新的cfg文件。

~/nvidia/nvidia_sdk/JetPack_4.4_DP_Linux_DP_JETSON_XAVIER_NX/Linux_for_Tegra/kernel/pinmux/t19x$ ls
addr_info.txt       mandatory_pinmux.txt  pinmux-dts2cfg.py  README.txt
gpio_addr_info.txt  pad_info.txt          por_val.txt
3. 调试结果

我又试了一次,结果还是一样。GPIO14可以工作,但GPIO7不能工作。

我修改了(tegra19x-mb1-pinmux-p3668-a01.cfg),将GPIO7的值改为GPIO14,如下所示。cfg文件中“GPIO14”的值为

pinmux.0x0243d038 = 0x00000410; # gp_pwm2_px2: gp, tristate-enable, input-disable, lpdr-disable

但GPIO7的值为:

pinmux.0x0243d030 = 0x00000415; # gp_pwm3_px3: rsvd1, pull-down, tristate-enable, input-disable, lpdr-disable. So I changed GPIO7 to
pinmux.0x0243d030 = 0x00000410; # gp_pwm3_px3: gp, tristate-enable, input-disable, lpdr-disable

在编译& 刷机后,我使用下面的说明来尝试触发模块上的PWM信号:

为了弄清楚GPIO7是否映射到3个pwm器件中的任何一个。
(3280000.pwm, 32c0000.pwm, 32f0000.pwm)
我在所有3上尝试了这些命令,并探测了一个pwm信号的引脚没有成功

CONFIG_PWM_SYSFS=y
cd 32X0000.pwm/pwm/pwmchipY
echo 0 > export
cd pwm0
echo 200000 > period
echo 100000 > duty_cycle
echo 1 > enable
4. 检查pinmux

GPIO 7是PWM 8, GPIO14是PWM5

gpio7:
pinmux.0x02430040 = 0x00000056; # soc_gpio44_pr0: rsvd2, pull-down, tristate-enable, input-enable, io_high_voltage-disable, lpdr-disable
gpio14:
pinmux.0x02434090 = 0x00000414; # soc_gpio12_ph0: rsvd0, pull-down, tristate-enable, input-disable, lpdr-disable

在两个寄存器中都将值改为0x455并检查PWM信号吗?
测试后没有任何改变。
GPIO 14在示波器上仍然显示为PWM信号,但GPIO7保持在0。

在这个cfg文件中进行了更改:
tegra19x-mb1-pinmux-p3668-a01.cfg。
该文件存在于两个地方,都被修改了。
更改如下:

pinmux.0x02430040 = 0x00000455; # NVIDIA says GPIO7 = PWM8
pinmux.0x02434090 = 0x00000455; # NVIDIA says GPIO14 = PWM5

在pinmux电子表格上,GPIO07与GP_PWM8相同,但GPIO14是GP_PW6。

GPIO7应该是这样的

pinmux.0x02430040 = 0x00000401; # soc_gpio44_pr0: gp, tristate-disable, input-disable, lpdr-disable

GPIO14是这样的:

pinmux.0x02434098 = 0x00000401; # soc_gpio13_ph1: gp, tristate-disable, input-disable, lpdr-disable
5. 查看dts

将pinmux配置电子表格与pinmux.cfg文件进行比较,
我确定GPIO14/PWM6的寄存器是0x02434098,而GPIO7/PWM8的寄存器是0x02430040。

就像我之前说的,GPIO14/PWM6默认情况下工作,没有任何改变,
但是当GPIO7/PWM8被分配与GPIO14/PWM6相同的值时,GPIO7/PWM8保持低值,

例如0x455, 0x401, 0x409, 0x405, GPIO7/PWM8从不工作。
然而,GPIO14/PWM6的值变化似乎只影响启动duty_cycle/ cur_pwm值,即它是130还是0。

所有与PWM相关的节点在设备树上都是开启的

wm@3280000 {
status = “okay”;
};
pwm@32c0000 {
status = “okay”;
};
pwm@32d0000 {
status = “okay”;
};
pwm@32f0000 {
status = “okay”;
};
pwm@c340000 {
status = “okay”;
};
6. 对比gpio寄存器

正确的寄存器是:

gpio7:(Pin 32 on 40-pin header)
pinmux.0x02430040 = 0x00000056; # soc_gpio44_pr0: rsvd2, pull-down, tristate-enable, input-enable, io_high_voltage-disable, lpdr-disable
gpio14: (FAN pin present on SOC)
pinmux.0x02434090 = 0x00000414; # soc_gpio12_ph0: rsvd0, pull-down, tristate-enable, input-disable, lpdr-disablegpio7:(40针头部上的32针)
pinmux 0x02430040 = 0 x00000056;# soc_gpio44_pr0: rsvd2,下拉,trstate -enable, input-enable, io_high_voltage-disable, lpdr-disable
gpio14:(FAN引脚在SOC上)
pinmux 0x02434090 = 0 x00000414;# soc_gpio12_ph0: rsvd0, pull-down, trstate -enable, input-disable, lpdr-disable
pinmux 0x02434098 = 0 x00000401;# soc_gpio13_ph1是CPU_OVR_VID引脚,也指向GPIO14。

风扇PWM引脚在默认情况下是不使用的,使用CPU_OVR引脚,它已经被配置为PWM。
所以是有效的

在GPIO14的工作case中转储以下寄存器
0x02434098 (GPIO14: PWM6: CPU_OVR_VID)
0 x02434090 (GPIO14 PWM5):

以下是将0x02430040更改为0x401后的值。同时,在示波器的40引脚头上的pin32是0。

busybox devmem 0x02430040
0x00000401
busybox devmem 0x02434090
0x00000414
busybox devmem 0x02434098
0x00000401
7. 查询gpio是否在切换
不使用引脚作为PWM,保持gpio
短针31和32在40针头部
echo 424 > /sys/class/gpio/export
echo 416 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio416/direction
echo in > /sys/class/gpio/gpio424/direction
echo 1 > /sys/class/gpio/gpio416/value
cat /sys/class/gpio/gpio424/value
##在32脚测量电压,应该是3.3V
echo 0 > /sys/class/gpio/gpio416/value
cat /sys/class/gpio/gpio424/value
##检查32脚电压,应该是0V
重复步骤7的步骤3-4次。
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
free-jdx
红包 95 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区