本文的写作目的:
目前网络上有很多文章是介绍如何使用Jetson Nano的40针引脚的GPIO功能,我搜索到的文章都是使用Python库函数来配置与使用Jetson Nano引脚的GPIO功能。本文提供一种使用C语言来配置与使用Jetson Nano引脚的GPIO功能。
先列出本文的参考文献:
1.出自NVIDIA英伟达中国的NVIDIA Jetson Nano 2GB 系列文章(43):jetson的40针引脚
2.Tegra_X1_TRM_DP07225001_v1.3p
3. NV_Jetson_Nano_DeveloperKit_Users_Pinmux_Configuration.xls
http://4.docs.nvidia.com/jetson/…
Jetson 系列产品具备智能计算,主要用于模式识别,机器视觉等计算量大的应用,同时Jetson产品配置了“扩充引脚”可用于控制。
一、查询与配置40 pin Header
http://docs.nvidia.com/jetson/…里“Hardware Setup”的“Configuring the 40-Pin Expansion Header”有详细的内容介绍如何如何使用/opt/nvidia/jetson-io/目录下的python工具来查询与设置GPIO引脚属性。
大致过程如下:
1. 在/opt/nvidia/jetson-io/目录下执行以下指令sudo python jetson-io.py 或sudo ./jetson-io.py进入主菜单
主菜单
2. 通过按键盘的上下键反白选择“Configure Jetson 40pin Header”,再按回车就会出现以下选择菜单
40 pin header 菜单
图片中显示为unused 引脚就是系统当前配置为GPIO功能的引脚。
二、 从电子表格NV_Jetson_Nano_DeveloperKit_Users_Pinmux_Configuration.xls中查找某个引脚所属的GPIO的bank编号 和port 编号。例如37号引脚属于GPIO的portB的4位。
三、 查看技术参考手册Tegra_X1_TRM_DP07225001_v1.3p相关章节找出37号引脚属于GPIO的bank1portB各个寄存器的地址
一、Jetson nano 引脚结构(引自Tegra_X1_TRM_DP07225001_v1.3p.pdf228页)介绍
jetson nano 引脚结构图
每个IO引脚最多可以配置为5个功能(4个特殊功能,1个GPIO功能)。
GPIO_sf_sel信号可以决定某个引脚是特殊功能还是GPIO功能。
Pinmux[1:0] 信号可以决定4个特殊功能中的具体哪一个功能。
先看输出部分:GPIO_sf_sel信号可以决定是某个特殊功能输出还是GPIO输出连接到IO引脚。如果GPIO_sf_sel信号决定把特殊功能的输出连接到IO引脚。Pinmux[1:0] 信号再决定将4个特殊功能输出(SFIO_out[3:0])中的具体哪一个特殊功能的输出连接到IO引脚。
再看输入部分:GPIO_sf_sel信号决定是把IO引脚的输入送到特殊功能输入还是送到GPIO输入。如果GPIO_sf_sel信号决定IO引脚的输入送到特殊功能输入。Pinmux[1:0] 信号再决定将IO引脚的输入送到4个特殊功能输入(SFIO_in[3:0])中的具体哪一个特殊功能输入。
其他信号说明:GPIO_oe通用输入输出功能输出使能信号。
SFIO_oe[3:0]特殊功能的输出使能信号。
E_input 输入使能信号。
PUPD=1下拉电阻使能信号。
PUPD=2上拉电阻使能信号。
Tristate高阻态使能信号。
其他信号,E_DPD可能与睡眠模式有关,DRV_TYPE[1:0] 可能用来设置输出电流大小,输出电压高低,输出电阻大小,压摆率等有关功能。
二、查询表格文件NV_Jetson_Nano_DeveloperKit_Users_Pinmux_Configuration.xls可以知道Jetson Nano的40针引脚的某个引脚与具体哪个GPIO 的哪个port的哪个位bit对应。下图是表格的一部分的截图,重点看表格的40 pin Header和GPIO两列。
表格截图
从表格可以知道7号针脚与GPIO的portBB的0位对应。37号针脚与GPIO的portB的4位对应。
三 、Jetson nano GPIO 控制器地址
Jetson nano GPIO 控制器有8组 ,组号从0开始一直排到7;每组可控制32个io 引脚的GPIO功能。一组GPIO 控制器有分成4个端口(port),每个port有8个io引脚。Port号从字母A一直排Z,在从AA排到FF。portA-portD在0组,以此类推。
每个port的GPIO控制器包含若干个用于控制和反馈8个GPIO状态的寄存器。
一组gpio控制器内的几个寄存器
从手册第二章(手册22页)给出的地址映射表中可以知道GPIO控制器的基地址是6000D000
每组gpio控制器的寄存器基地址
从手册9.13节(手册247页)给出的GPIO控制器寄存器地址偏移表中可以知道GPIO控制器寄存器的偏移地址是从0开始的。
每个port的寄存器偏移地址
从图中可以看出,portA的相关地址分别是6000D000,6000D010,6000D020,6000D030,6000D040,6000D050,6000D060,6000D070,6000D080,6000D090,6000D0A0,6000D0B0,6000D0C0,6000D0E0,6000D0F0。