(直接从文档复制过来的,看起来很乱啊,想要具体教程可以留言邮箱我发)
1.下载 u-boot 并编译
下载:
~/
git clone https://github.com/u-boot/u-boot
cd 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
~/
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-
1)~/u-boot/board/ti/am57xx/mux_data.h
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 是空的,所以只
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 文件。
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 和
输入 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。
for what purposes. However, those numbers are not always stable; GPIOs on a
daughtercard might be different depending on the base board be
环境与条件
硬件:Beagleboard-x15
内核版本:linux 4.9.69-ti-rt-r85
其它:sd 卡、杜邦线、示波器、引脚扩展器Enable SPI and GPIO in BeagleBoard-X15
一、准备 u-boot 和 kernel1.下载 u-boot 并编译
下载:
~/
git clone https://github.com/u-boot/u-boot
cd u-boot/
git checkout v2017.01 -b tmp
~/u-bootgit 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
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 卡
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 进行测试
输入 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 usedfor what purposes. However, those numbers are not always stable; GPIOs on a
daughtercard might be different depending on the base board be