在 Beagleboard-x15 上配置 spi 和 GPIO

(直接从文档复制过来的,看起来很乱啊,想要具体教程可以留言邮箱我发)

环境与条件

 硬件:Beagleboard-x15

内核版本:linux 4.9.69-ti-rt-r85

其它:sd 卡、杜邦线、示波器、引脚扩展器Enable SPI and GPIO in BeagleBoard-X15

一、准备 u-boot 和 kernel
1.下载 u-boot 并编译
下载:
~/
git clone https://github.com/u-boot/u-boot
cd u-boot/

git checkout v2017.01 -b tmp

~/u-boot
git pull --no-edit git://git.ti.com/ti-u-boot/ti-u-boot.git ti-u-boot-2017.01
git checkout 590c7d7fe15d06a4d708403d3234bcd01cd039e1
wget -c https://rcn-ee.com/repos/git/u-boot-patches/ti-2017.01/0001-beagle_x15-uEnv.txt-
bootz-n-fixes.patch
patch -p1 < 0001-beagle_x15-uEnv.txt-bootz-n-fixes.patch
编译:
~/u-boot
make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am57xx_evm_defconfig

make ARCH=arm CROSS_COMPILE=${CC}

2.下载 kernel 并编译


下载:
~/
git clone https://github.com/RobertCNelson/ti-linux-kernel-dev.git
cd ti-linux-kernel-dev/
下载 TIv4.9.x:
~/ti-linux-kernel-dev/
git checkout origin/ti-linux-4.9.y -b tmp
下载 TIv4.9.x:Real-Time
~/ti-linux-kernel-dev/
git checkout origin/ti-linux-rt-4.9.y -b tmp
编译:~/ti-linux-kernel-dev/
./build_kernel.sh
(参考:http://eewiki.net/display/linuxonarm/BeagleBoard-X15#BeagleBoard-X15-

Bootloader:U-Boot)

我们这里一共需要修改两份文件:
1)~/u-boot/board/ti/am57xx/mux_data.h

2)~/ti-linux-kernel-dev/KERNEL/arch/arm/boot/dts/am57xx-beagle-x15-revc.dts


二、查看需求文档并使用 PINMUX


1.找出一共需要配置的 SPI 和 GPIO从上图可以看到我们这里需要配置 SPI3 和 SPI4,还有其余 20 个 GPIO。
2.使用 PINMUX cloud 对全部进行复用
1)登录 https://dev.ti.com/,选择 PinMux,在 Device 中选择 AM5728_SR2.0,然
后点击 Start 按钮进入配置界面,如下图
然后我们按照上述步骤中的需求图配置好 spi 和 gpio
(1)spi3 和 spi4 配置好后如下图:(2)再加上 20 个 gpio 配置好后如下图
可以看到右上 output 栏出现 8 个文件,前 4 个用于 RT-OS,后三个用于 Linux,最后一
个文件是可以看到你所有配置的表,现在把 genericFileFormatIOdelay.txt 和
genericFileFormatPadConf.txt 下载下来。
3)用脚本生成所需要的 u-boot 配置代码
这里我们需要用到 am57xx_generate_pin_config_data.pl 这个脚本,附录 A 可以得
到。
在命令行输入:
./am57xx_generate_pin_config_data.pl -p
genericFileFormatPadConf.txt -d genericFileFormatIOdelay.txt \
-o iopad >padconf.h
./am57xx_generate_pin_config_data.pl -pgenericFileFormatPadConf.txt -d genericFileFormatIOdelay.txt \
-o iodelay >iodelay.h
而后会生成 padconf.h 和 iodelay.h 两个文件,我们这里 iodelay.h 是空的,所以只

需要 padconf.h。


三、修改 u-boot 和设备树文件

把一、中最后提到的 mux_data.h 和 am57xx-beagle-revc.dts 打开
1)首先修改 mux_data.h
打开 padconf.h,复制内容到 mux_data.h 中 const struct pad_conf_entry
core_padconf_array_essential_x15[] = {} 的最后部分。
(注意:如果不复制到最后会发生被覆盖的可能)
现在我们已经把 spi 和 gpio 都配置好了,但是 spi 还需要生成设备节点,所以还需要在
dts 中进行注册。
2)在 am57xx-beagleboard-revc.dts 中注册 spi 节点
添加如下代码在 dts 的末尾处OK,到这里主要工作就完成了,接下来进行 dtb 和 u-boot 的编译工作。
u-boot:
~/u-boot
make ARCH=arm CROSS_COMPILE=${CC}
该步骤会重新生成 MLO 和 u-boot.img 文件。
dtb:
~/ti-linux-kernel-dev/KERNEL
make ARCH=arm CROSS_COMPILE=${CC} am57xx-beagle-x15-revc.dtb
该步骤会重新生成 am57xx-beagle-x15-revc.dtb 文件。

(注意:如果出现错误可能是没有 root 权限或者编译器没指定)


四、烧录 SD 卡


如果还没对 sd 卡制作启动盘,可以参考
http://eewiki.net/display/linuxonarm/BeagleBoard-X15#BeagleBoard-
X15-Bootloader:U-Boot 中 Setup microSD card 部分进行制作。已经有一张装有 Linux 系统的 sd 卡的情况下,把三、步骤中最后得到的两个文件放在 sd
卡中合适的位置:
1) am57xx-beagle-x15-revc.dtb :替代 /boot/dtb/4.9.69-ti-rt-r85/ 中的同名文件
2 ) MLO 和 u-boot.img :
~/
sudo dd if=./u-boot/MLO of=/dev/sdb count=2 seek=1 bs=128k
sudo dd if=./u-boot/u-boot.img of=/dev/sdb count=4 seek=1 bs=384k
完成后退出 sd 卡,插入板子启动,至此我们的配置过程已经全部完成。接下来是对 spi 和

gpio 的测试部分。


五、在 beagleboard-x15 上对 spi 和 gpio 进行测试


1、对 SPI3 和 SPI4 进行自收发测试
输入 ls /dev/spi*,可以看到 spidev1.0(SPI3),spidev2.0(SPI4)两个设备节
点,说明 spi 已经成功打开,但是能不能收发数据需要进一步的测试。
1)把 SPI3 和 SPI4 的 d0 和 d1 分别使用杜邦线进行连接:SPI3:P16-33 ---- P16-04
SPI4:P16-14 ---- P16-37
2)运行测试程序
使用 spidev_test.c 官方测试程序进行测试,该程序贴在附录 B。
使用 gcc 先对 spidev_test.c 进行编译 gcc spidev_test.c -o spidev_test
对 SPI3 进行测试:
./spidev_test.c -D /dev/spidev1.0
如果结果如上图所示(图来源网络),那么代表测试成功!SPI4 同理。
2、对 GPIO 进行测试
我们这里是在用户空间使用 sysfs 对 GPIO 进行测试。我们这里只进行简单的 in/out 测
试步骤,具体每个步骤和文件的含义可以参考附录 C。
测试 gpio2_27:
1)命令行输入:
cd /sys/class/gpio
echo 59 > export
cd gpio59
echo out > direction
2)使用示波器的探线接上 P16-17,另一边接地。观察当前为高电平还是低电平
3)如果初始为高电平:echo 0 > value
如果初始为低电平:echo 1 > value
4)观察示波器的变化,如果发生高低电平变化则代表 out 成功。
5)echo in > direction
6)cat value 查看当前 value 值
7)如果 value 值为 1,使用杜邦线使 P16-17 引脚接地,在 cat value 查看是否变为
0,然后拔掉一边,再查看 value 是否变回 1。如果一开始 cat value 为 0,则对引脚接
VCC 3.3v 电源,查看 value 是否变为 1,然后拔出电源,是否回 0。

如果上述步骤都成功,那么代表 in 成功。

说明:GPIO 的编号的计算

官方说法是: Board documentation should in most cases cover what GPIOs are used
for what purposes. However, those numbers are not always stable; GPIOs on a
daughtercard might be different depending on the base board being used, or other cards
in the stack. In such cases, you may need to use the gpiochip nodes (possibly in
conjunction with schematics) to determine the correct GPIO number to use for a given
signal.
这里是利用设备树文件 am57xx-beagle-x15-common.dtsi 中对 gpio7_11 进行
了 vtt_fixed 配置,利用 cat /sys/kernel/debug/gpio 可以查看引脚编号 203 被
作为 vtt_fixed 功能,可以得出 203 = (7-1)*32 + 11 的规律猜
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值