jetson tx2 nx使用wk2168通过spi转出4个串口

jetson tx2 nx使用wk2168通过spi实现扩展4个串口

首先:不要连接ssd,系统运行在emmc上进行调试

一、修改设备树

修改设备树,主要是完成外设在jetson平台下的设备信息的加载。这里采用源码编译的方式重新生成设备树文件,然后采用命令刷新的方式进行更新,主要步骤如下:
1.在Jetson Linux Archive下载对应的源码, 注意jetson平台下的Linux Version,下载1(BSP Drives) 和2(source) 如下图
在这里插入图片描述
2. 解压kernel_src

mkdir source
tar -jxvf public_sources.tbz2 -C ~/source/
cd ~/source/Linux_for_Tegra/source/public
tar -jxvf kernel_src.tbz2

在~/source/Linux_for_Tegra/source/public/kernel_src/hardware/nvidia/platform/t18x/lanai/kernel-dts/common中,找到tegra186-p3636-0001-common.dtsi进行修改:
在这里插入图片描述
注意1:具体的位置,需要根据系统版本(主要包括Soc、L4t、jetpack及P-number),其中我使用的是R32.7.4(jetpack4.6.4)对应的是tegra186-p3636-0001.包括上图修改部分中的宏TEGRA_MAIN_GPIO也是需要和版本对应。可以通过以下命令获取相关版本信息:
获取版本信息

sudo apt install python3-pip
sudo -H pip3 install -U jetson-stats
sudo systemctl restart jetson_stats.service
reboot
jtop # 在jtop界面的info页面可以确认多种版本信息

在这里插入图片描述
获取dtb版本

cat /proc/device-tree/nvidia,dtsfilename

在这里插入图片描述

注意2:其中spi@0中的irq_gpio信息是指绑定irq引脚,该中断引脚应为普通GPIO口,且初始状态应为input up(尽可能使用初始系统原有的符合状态的GPIO,这样比较方便,如果没有则需要根据pinmux spreadsheet进行修改后刷新)。我这里采用的是pin26(未被复用的spi0_cs1),其中TEGRA_MAIN_GPIO(Y, 3)的确定,主要是根据pinmux spreadsheet查询的,如下图.
在这里插入图片描述
注意:物理引脚的对应需要和原理图或者pin40图来对应
修改完成后,按照以下方法进行编译(这里采用交叉编译的方式):

# 1.下载交叉编译工具
wget http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
# 2.下载完成后进行解压
# 3.安装工具
sudo apt install build-essential bc
# 4.进入源码目录
cd ~/source/Linux_for_Tegra/source/public/kernel_src/kernel/kernel-4.9/
# 5.设置编译输出目录
TEGRA_KERNEL_OUT=~/kout
mkdir -p $TEGRA_KERNEL_OUT
# 6. 设置交叉编译工具的环境变量
export CROSS_COMPILE=path:/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
export LOCALVERSION=-tegra
# 7.内核编译
make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig
make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j${nproc}

二、刷新系统

根据上面下载的BSP Drives,按照如下步骤操作

# 解压Drives文件
mkdir ~/Drives
tar -jxvf Jetson_Linux_R32.7.4_aarch64.tbz2 -C ~/Drives/
cd ~/Drives/Linux_for_Tegra/rootfs
sudo tar xjf path:/Tegra_Linux_Sample-Root-Filesystem_R32.7.4_aarch64.tbz2
# 替换更新后的dtb
cp -i ~/kout/XXX/tegra186-p3636-0001-p3509-0000-a01.dtb ~/Drives/Linux_for_Tegra/kernel/dtb/ 
# 刷新系统
cd ~/Drives/Linux_for_Tegra/
sudo ./apply_binaries.sh
# 配置恢复模式,刷机
sudo ./flash.sh jetson-xavier-nx-devkit-tx2-nx mmcblk0p1

外设连接

jetson tx2 nx pin 40管脚图
将wk2168连接到spi0上,具体连接如下:

序号标识管脚描述board
1vcc3.3vpin1
2GND电源地pin39
3SCLK时钟输入pin23
4MOSI数据输入pin19
5MISO数据输出pin21
6CS片选信号pin24
7IRQ中断信息pin26

加载驱动

1.利用jetson-io打开spi功能

sudo /opt/nvidia/jetson-io/jetson-io.py

打开spi后,reboot
2. 加载驱动

git clone https://gitee.com/alinn66/wk2168_2114_drive.git
cd wk2168_2114_drive
make
sudo insmod wk2xxx_spi.ko
ls /dev/ttysWK*
# 正常情况下可以出现4个串口,也可以查看log具体信息
sudo dmesg # 主要是分析错误,查看irq是否成功

串口测试

采用cutecom进行测试即可,查看是否可以正常收发数据

sc16is752 调试问题

按照以上同样的方法进行测试,主要是设备树有区别,如下
在这里插入图片描述
但是通过dmesg查看日志,会出现genirq的错误
在这里插入图片描述
欢迎交流,如有大佬调试成功,请告知下,万分谢谢!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hanqu3456

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值