Jetson Nano Jetson Nano开发板40针引脚详解
Jetson Nano是一款由英伟达开发的微型电脑主板,功能强大,价格适中,功耗低等众多特点,让他深受广大创客的喜爱。
Jetson Nano 主板采用小型双列直插式内存模块 (SO-DIMM) 外形尺寸,插入一块 100x80mm 开发板上。开发板上有许多典型的计算机接口,如 USB 3.0、千兆以太网和视频(支持 4k 60fps)。还有一套40引脚扩展引脚,Raspberry Pi 上的引脚非常相似。其布局与 Pi 的引脚几乎相同,还支持 Pi 的摄像头。本文要详细介绍一下Jetson Nano的40针引脚,并分析其功能特点。
J41引脚列表
.pow33v { border: 8px solid #fd952a!important; } .pow5v { border: 8px solid #fc363b!important; } .i2c { border: 8px solid #fc4cfc!important; } .i2s { border: 8px solid #63c9cb!important; } .uart { border: 8px solid #ab60fb!important; } .spi { border: 8px solid #343ffb!important; } .gnd { background-color: black!important; line-height: 19px; border: 8px solid yellow!important; color: #ffffff; } .pin { background-color: white; width: 35px; height: 35px; line-height: 17px; position: relative; border: 8px solid green; border-radius: 100%; text-align: center; margin: 0px auto; } .pow33v-bg { background-color: #fecb9c !important; } .gnd-bg { background-color: #dddddd !important; } .pow5v-bg { background-color: #fecccd !important; } .i2c-bg { background-color: #fecdfe !important; } .i2s-bg { background-color: #d0e7f4 !important; } .spi-bg { background-color: #d0e7f4 !important; } .uart-bg { background-color: #e6e7fe !important; } .i2s-bg { background-color: #d0f7fa !important; } .gpio-bg { background-color: #cefcce !important; } table#pinout { width:100%; text-align: center; } table img { height:250px; }
| GPIO (BCM) | 名称 | 引脚 | 引脚 | 名称 | GPIO (BCM) |
|---|---|---|---|---|---|
| 3.3V输出 | 1 | 2 | 5.0V 输出 | ||
| I2C_2_SDA**I2C Bus 1 | 3** | 4 | 5.0V 输出 | ||
| I2C_2_SCL**I2C Bus 1 | 5** | 6 | GND | ||
| GPIO216**(D4) | AUDIO_MCLK | 7** | 8 | UART_TX2 | |
| **/dev/ttyTHS1 | |||||
| GND | 9** | 10 | UART_RX2**/dev/ttyTHS1 | ||
| GPIO50 | |||||
| (D17) | UART_2_RTS | 11** | 12 | I2S_4_SCLK | GPIO79 |
| **(D18) | |||||
| GPIO232 | |||||
| (D23) | SPI_2_SCK | 13** | 14 | GND | |
| GPIO194**(D22) | LCD_TE | 15** | 16 | SPI_2_CS1 | GPIO232 |
| **(D23) | |||||
| 3.3V输出 | 17** | 18 | SPI_2_CS0 | GPIO15 | |
| **(D24) | |||||
| GPIO16 | |||||
| (D10) | SPI_1_MOSI | 19** | 20 | GND | |
| GPIO17**(D9) | SPI_1_MOSO | 21** | 22 | SPI_2_MISO | GPIO13 |
| **(D23) | |||||
| GPIO18 | |||||
| (D11) | SPI_1_SCK | 23** | 24 | SPI_1_CS0 | GPIO19 |
| **(D8) | |||||
| GND | 25** | 26 | SPI_1_CS1 | GPIO20**(D7) | |
| I2C_1_SDA |
I2C Bus 0 | 27** | 28 | I2C_1_SCL I2C Bus 0 | | | GPIO149 (D5) | CAM_AF_EN | 29 | 30 | GND | | | GPIO200**(D6) | GPIO_PZ0 | 31** | 32 | LCD_BL_PWM | GPIO168**(D12) | | GPIO38 (D13) | GPIO_PE6 | 33** | 34 | GND | | | GPIO76**(D19) | I2S_4_LRCK | 35** | 36 | UART_2_CTS | GPIO51**(D16) | | GPIO12 (D26) | SPI_2_MOSI | 37** | 38 | I2S_4_SDIN | GPIO77**(D20) | | | GND | 39** | 40 | I2S_4_SDOUT | GPIO78 (D21) |
引脚顶部底部照片
| 从板子顶部看 | 从板子底部看 |
|---|---|
![]() | ![]() |
GPIO引脚
对于那些使用过树莓派的人来说,GPIO(通用输入/输出)引脚是一种接口形式,我们可以连接传感器、灯和其他组件,可以通过编程(C++、Python等)。 Jetson Nano的40针引脚和树莓派兼容接头 (J41),但GPIO 要在 JetsonNano 上旋转才能和树莓派的HAT兼容。与树莓派一样,Jetson Nano的GPIO电压为3.3V,因此在不使用电压电平转换的情况下,不应将高于3.3V 的电压电平连接Nano GPIO 引脚。
I2C引脚
Jeton Nano I2C 控制器支持NXP I2C 间总线 (I2C) 规范中定义的设备进行系统扩展。 I2C 总线支持与多个设备的串行设备通信,I2C 控制器处理时钟源协商,标准和快速设备的速度协商,根据 I2C 协议支持 7 位从地址,并支持主从操作模式。 I2C 控制器支持以下工作模式:Master – Standard-mode(最高 100Kbit/s)、Fast-mode(最高 400Kbit/s)、Fast-mode plus(Fm+,最高 1Mbit/s);Slave – 标准模式(最高 100Kbit/s)、快速模式(最高 400 Kbit/s)、Fastmode plus(Fm+,最高 1Mbit/s)。
引脚供电
两个5V的power引脚都可以供3A的供电,如果使用的带电源的扩展板就可以很容易的供电了,至于J48引脚,有无跳线帽均可(GND要连)。
参考文章:
-
物理引脚编号(Physical Pin Number):按引脚在排针上的物理位置顺序编号,从1开始依次递增,直观易找。
-
BCM编号(Broadcom SOC Channel):采用芯片内部的通道编号方式,与物理位置无关,编程时使用此编号来指定GPIO。
Jetson Nano GPIO 实战应用
1. 使用Python控制GPIO
Jetson Nano支持使用Python库Jetson.GPIO来控制GPIO引脚:
安装Jetson.GPIO库:
sudo apt update
sudo apt install python3-pip
sudo pip3 install Jetson.GPIO
基础GPIO示例:
import Jetson.GPIO as GPIO
import time
# 设置GPIO模式
GPIO.setmode(GPIO.BOARD) # 使用物理引脚编号
GPIO.setwarnings(False)
# 配置引脚7为输出
output_pin = 7 # BOARD引脚7,对应BCM GPIO4
GPIO.setup(output_pin, GPIO.OUT, initial=GPIO.LOW)
print("Starting blinking LED...")
try:
while True:
GPIO.output(output_pin, GPIO.HIGH)
print("LED ON")
time.sleep(1)
GPIO.output(output_pin, GPIO.LOW)
print("LED OFF")
time.sleep(1)
except KeyboardInterrupt:
print("Program stopped by user")
finally:
GPIO.cleanup()
2. 读取按钮输入
import Jetson.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
button_pin = 11 # BOARD引脚11
led_pin = 7
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(led_pin, GPIO.OUT)
print("Press the button to toggle LED...")
try:
while True:
button_state = GPIO.input(button_pin)
if button_state == GPIO.LOW: # 按钮按下(低电平)
GPIO.output(led_pin, GPIO.HIGH)
print("Button pressed - LED ON")
else:
GPIO.output(led_pin, GPIO.LOW)
print("Button released - LED OFF")
time.sleep(0.1) # 简单去抖动
except KeyboardInterrupt:
print("Program stopped")
finally:
GPIO.cleanup()
3. PWM输出控制
import Jetson.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
# 引脚32支持PWM(PWM0)
pwm_pin = 32
GPIO.setup(pwm_pin, GPIO.OUT)
# 创建PWM对象,频率1kHz
pwm = GPIO.PWM(pwm_pin, 1000)
# 启动PWM,初始占空比0%
pwm.start(0)
print("Starting PWM control...")
try:
while True:
# 逐渐增加亮度
for duty in range(0, 101, 5):
pwm.ChangeDutyCycle(duty)
print(f"Duty cycle: {duty}%")
time.sleep(0.1)
# 逐渐降低亮度
for duty in range(100, -1, -5):
pwm.ChangeDutyCycle(duty)
print(f"Duty cycle: {duty}%")
time.sleep(0.1)
except KeyboardInterrupt:
print("Program stopped")
finally:
pwm.stop()
GPIO.cleanup()
4. I2C通信示例
安装I2C工具:
sudo apt install python3-smbus i2c-tools
扫描I2C设备:
sudo i2cdetect -y -r 1
读取I2C传感器(如MPU6050):
import smbus
import time
# I2C总线1
bus = smbus.SMBus(1)
# MPU6050地址
MPU6050_ADDR = 0x68
# 唤醒MPU6050
bus.write_byte_data(MPU6050_ADDR, 0x6B, 0)
print("Reading MPU6050 data...")
try:
while True:
# 读取加速度数据(6字节)
accel_data = bus.read_i2c_block_data(MPU6050_ADDR, 0x3B, 6)
# 转换为有符号整数
accel_x = (accel_data[0] << 8) | accel_data[1]
accel_y = (accel_data[2] << 8) | accel_data[3]
accel_z = (accel_data[4] << 8) | accel_data[5]
# 转换为g值(灵敏度:±2g = 16384 LSB/g)
accel_x = accel_x / 16384.0
accel_y = accel_y / 16384.0
accel_z = accel_z / 16384.0
print(f"Accel X: {accel_x:.2f}g, Y: {accel_y:.2f}g, Z: {accel_z:.2f}g")
time.sleep(0.5)
except KeyboardInterrupt:
print("Program stopped")
5. SPI通信示例
安装SPI工具:
sudo apt install python3-spidev
SPI通信示例:
import spidev
import time
# 创建SPI对象
spi = spidev.SpiDev()
# 打开SPI总线0,设备0
spi.open(0, 0)
# 配置SPI
spi.max_speed_hz = 500000 # 500kHz
spi.mode = 0 # SPI模式0
print("Starting SPI communication...")
try:
while True:
# 发送数据并接收
data_to_send = [0x01, 0x02, 0x03]
response = spi.xfer2(data_to_send)
print(f"Sent: {data_to_send}")
print(f"Received: {response}")
time.sleep(1)
except KeyboardInterrupt:
print("Program stopped")
finally:
spi.close()
6. UART串口通信
配置UART:
# 禁用串口控制台
sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service
# 编辑/boot/extlinux/extlinux.conf,添加:
# console=none
UART通信示例:
import serial
import time
# 配置串口
ser = serial.Serial(
port='/dev/ttyTHS1', # Jetson Nano UART
baudrate=115200,
timeout=1
)
print("Starting UART communication...")
try:
while True:
# 发送数据
message = "Hello from Jetson Nano!\n"
ser.write(message.encode())
print(f"Sent: {message.strip()}")
# 接收数据
if ser.in_waiting > 0:
received = ser.readline().decode().strip()
print(f"Received: {received}")
time.sleep(1)
except KeyboardInterrupt:
print("Program stopped")
finally:
ser.close()
7. 实际应用案例
案例1:智能温控风扇
import Jetson.GPIO as GPIO
import time
# 配置
FAN_PIN = 32 # PWM控制引脚
TEMP_THRESHOLD = 50 # 温度阈值(摄氏度)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(FAN_PIN, GPIO.OUT)
fan_pwm = GPIO.PWM(FAN_PIN, 25000) # 25kHz PWM频率
fan_pwm.start(0)
def get_cpu_temperature():
with open('/sys/devices/virtual/thermal/thermal_zone0/temp', 'r') as f:
return int(f.read()) / 1000.0
try:
while True:
temp = get_cpu_temperature()
if temp < 40:
fan_pwm.ChangeDutyCycle(0)
elif temp < 50:
fan_pwm.ChangeDutyCycle(30)
elif temp < 60:
fan_pwm.ChangeDutyCycle(60)
else:
fan_pwm.ChangeDutyCycle(100)
print(f"Temperature: {temp:.1f}°C, Fan: {fan_pwm.ChangeDutyCycle}%")
time.sleep(2)
except KeyboardInterrupt:
fan_pwm.stop()
GPIO.cleanup()
案例2:LED矩阵显示
import Jetson.GPIO as GPIO
import time
# 8x8 LED矩阵引脚配置
ROW_PINS = [7, 11, 13, 15, 19, 21, 23, 29]
COL_PINS = [12, 16, 18, 22, 24, 26, 28, 32]
GPIO.setmode(GPIO.BOARD)
for pin in ROW_PINS + COL_PINS:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW)
# 显示图案(心形)
heart_pattern = [
[0,1,1,0,0,1,1,0],
[1,0,0,1,1,0,0,1],
[1,0,0,0,0,0,0,1],
[0,1,0,0,0,0,1,0],
[0,0,1,0,0,1,0,0],
[0,0,0,1,1,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0]
]
try:
while True:
for row_idx, row_pin in enumerate(ROW_PINS):
# 激活当前行
GPIO.output(row_pin, GPIO.HIGH)
# 设置列状态
for col_idx, col_pin in enumerate(COL_PINS):
GPIO.output(col_pin, not heart_pattern[row_idx][col_idx])
time.sleep(0.002) # 2ms扫描间隔
# 关闭当前行
GPIO.output(row_pin, GPIO.LOW)
except KeyboardInterrupt:
GPIO.cleanup()
8. 常见问题与解决方案
问题1:GPIO权限错误
# 将用户添加到gpio组
sudo usermod -a -G gpio $USER
# 重新登录或重启
问题2:I2C设备未检测到
# 检查I2C是否启用
sudo i2cdetect -y -r 1
# 检查设备树
sudo /opt/nvidia/jetson-io/jetson-io.py
问题3:PWM频率不准确
- Jetson Nano的PWM硬件支持有限
- 对于精确频率需求,考虑使用软件PWM或外部PWM芯片
问题4:GPIO响应速度慢
- Python库有开销,对于高速应用使用C/C++
- 考虑使用Jetson的硬件加速器
9. 安全注意事项
- 电压限制:GPIO引脚为3.3V,不要连接5V设备
- 电流限制:每个引脚最大输出16mA,总电流限制
- 静电保护:操作前释放静电
- 短路保护:避免引脚直接接地或接电源
- 电源隔离:外部设备使用独立电源
10. 进阶学习资源
官方文档:
社区资源:
项目灵感:
掌握Jetson Nano的GPIO接口,你就可以连接各种传感器、执行器和通信模块,创造出功能丰富的嵌入式AI应用。从简单的LED控制开始,逐步探索更复杂的项目,如机器人控制、计算机视觉系统和物联网网关。祝你开发愉快!
相关资源:

