tag 标签: libsoc

相关博文
  • 热度 2
    2019-5-14 10:34
    1365 次阅读|
    2 个评论
    By Toradex 秦海 1). 简介 在之前的一篇文章中已经介绍过如何 基于嵌入式 Linux 部署 libsoc 支持 , 本文就继续基于 NXP IMX6 平台演示基于 libsoc 分别对 GPIO , I2C , PWM 以及 SPI 进行开发示例。 本文所演示的 ARM 平台同样来自于 Toradex 基于 NXP iMX6 ARM 处理器的 Apalis iMX6 ARM 嵌入式平台。 2. 准备 a).Apalis iMX6QARM 核心版配合 Apalis Evaluation Board 载板 ,连接调试串口 UART1 (载板 X29 )到开发主机方便调试。更多关于 Apalis iMX6 配合 Apalis Evaluation Board 载板的说明请参考 Datasheet 和 开发上手指南 。 b). Apalis iMX6Q ARM 核心版配合 Ixora 载板 ,连接调试串口 UART1 (载板 X22 )到开发主机方便调试。 更多关于 Apalis iMX6 配合 Ixora 载板的说明请参考 Datasheet 和 开发上手指南 。 c). Apalis iMX6Q 安装 Toradex Linux BSP V2.8b5 ,系统中已经默认包含了本文测试所需要的 libsoc 相关库支持,详细安装方法请参考 这里 ,编译 libsoc 相关 demo 所需要的 SDK 配置请参考简介中提到的之前文章说明,本文不再赘述。 3). GPIO 测试示例 a). 基于 Apalis Evaluation Board 测试,硬件连接配置如下,基于 C 代码的 GPIO 测试请参考 这里 ,本文是基于 libsoc 来重新测试。 X4 GPIO05 X34 SW5 X4 GPIO06 X34 LED1 b). 源代码请参考如下,实现功能就是按键交替点亮和关闭 LED 灯。 https://github.com/simonqin09/libsoc-examples/blob/master/gpiotest/gpiointtest.c c). Makefile 请参考如下,直接下载的 libsoc 官方示例里面包含的 Makefile 需要进行一些修改,这里也将修改的 patch 附上。 ./ Makefile https://github.com/simonqin09/libsoc-examples/blob/master/gpiotest/Makefile ./ Patch file https://github.com/simonqin09/libsoc-examples/blob/master/gpiotest/libsoc-examples_Makefile.patch d). 测试运行结果如下: ----------------------- root@apalis-imx6:~# ./gpiointtest Waiting for interrupt. Press 'q' and 'Enter' at any time to exit LED turns on Interrupt occurred 1 times LED turns off Interrupt occurred 2 times … ----------------------- 4). PWM 测试示例 a). 基于 Apalis Evaluation Board 测试,硬件连接配置如下 , 基于 C 代码的 PWM 测试请参考 这里 ,本文是基于 libsoc 来重新测试。 X4 GPIO05 X34 SW5 X4 PWM1 X34 LED1 b). 源代码和 Makefile 请参考如下,实现功能就是程序运行后, PWM 以 50% 占空比输出,通过按键让 PWM 输出占空比按照 50% , 75% , 25% 交替调整。 https://github.com/simonqin09/libsoc-examples/blob/master/pwmtest/pwmtest.c https://github.com/simonqin09/libsoc-examples/blob/master/pwmtest/Makefile PWM2 和 PWM3 也都可以测试,只是 PWM3 默认被 ov5640_mipi 驱动占用,需要修改 device tree 释放。 d). 测试运行结果如下: ----------------------- root@apalis-imx6:~# ./pwmtest Waiting for interrupt. Press 'q' and 'Enter' at any time to exit Interrupt occurred 1 times PWM Duty set to 75% Interrupt occurred 2 times PWM Duty set to 25% Interrupt occurred 3 times PWM Duty set to 50% Interrupt occurred 4 times PWM Duty set to 75% … ----------------------- 5). I2C 测试示例 a). 基于 Ixora 载板测试,针对载板上面连接到 i2c-1 的总线上面的 EEPROM 进行读写,基于 C 代码的详细测试文档可以参考 这里 ,本文重新基于 libsoc 代码进行测试。 b). 源代码和 Makefile 请参考如下,实现功能就是程序运行后,针对指定的 page 号码写入数据,然后再读取后验证是否读写一致。 I2ctest.c -https://github.com/simonqin09/libsoc-examples/blob/master/i2ctest/i2ctest.c eeprom.c -https://github.com/simonqin09/libsoc-examples/blob/master/i2ctest/eeprom.c eeprom.h -https://github.com/simonqin09/libsoc-examples/blob/master/i2ctest/eeprom.h Makefile -https://github.com/simonqin09/libsoc-examples/blob/master/i2ctest/Makefile d). 测试运行结果如下: ----------------------- root@apalis-imx6:~# ./i2ctest 15 Writing to page starting at byte address: 0xf0 Waiting for data to be written libsoc-i2c-debug: No such device or address Waiting... libsoc-i2c-debug: No such device or address Waiting... libsoc-i2c-debug: No such device or address Waiting... libsoc-i2c-debug: No such device or address Waiting... Data sucessfully written! Reading page starting at byte address: 0xf0 data_write = 0xf0 : data_read = 0xf0 : Correct data_write = 0xf1 : data_read = 0xf1 : Correct data_write = 0xf2 : data_read = 0xf2 : Correct data_write = 0xf3 : data_read = 0xf3 : Correct data_write = 0xf4 : data_read = 0xf4 : Correct data_write = 0xf5 : data_read = 0xf5 : Correct data_write = 0xf6 : data_read = 0xf6 : Correct data_write = 0xf7 : data_read = 0xf7 : Correct data_write = 0xf8 : data_read = 0xf8 : Correct data_write = 0xf9 : data_read = 0xf9 : Correct data_write = 0xfa : data_read = 0xfa : Correct data_write = 0xfb : data_read = 0xfb : Correct data_write = 0xfc : data_read = 0xfc : Correct data_write = 0xfd : data_read = 0xfd : Correct data_write = 0xfe : data_read = 0xfe : Correct data_write = 0xff : data_read = 0xff : Correct ----------------------- 6). SPI Master 测试示例 a). 基于 Apalis Evaluation Board 测试,需要配合 Toradex 另外一个基于 NXP iMX7 的平台作为 SPI slave 进行共同测试,关于硬件连接和 SPI slave 的配制和相关代码请参考下面文章,本文是基于 libsoc 来测试 SPI Master 端。 https://www.toradex.com/zh-cn/blog/nxp-imx7-m4-he-xin-spi-slave-ce-shi b). 源代码和 Makefile 请参考如下,实现功能就是程序运行后,通过 Apalis iMX6 SPI0.0 向 SPI slave 写入一组随机数据,然后再次通讯读出刚才写入的数据后确认读写是否一致。 spitest.c -https://github.com/simonqin09/libsoc-examples/blob/master/spitest/spitest.c Makefile -https://github.com/simonqin09/libsoc-examples/blob/master/spitest/Makefile d). 测试运行结果如下: ----------------------- root@apalis-imx6:~# ./spitest Start to transfer! data_send = 0xca : data_read = 0xca : Correct data_send = 0x03 : data_read = 0x03 : Correct data_send = 0x01 : data_read = 0x01 : Correct data_send = 0x56 : data_read = 0x56 : Correct data_send = 0xb2 : data_read = 0xb2 : Correct data_send = 0x64 : data_read = 0x64 : Correct data_send = 0xf9 : data_read = 0xf9 : Correct data_send = 0x34 : data_read = 0x34 : Correct data_send = 0x91 : data_read = 0x91 : Correct data_send = 0x84 : data_read = 0x84 : Correct data_send = 0x19 : data_read = 0x19 : Correct data_send = 0x0c : data_read = 0x0c : Correct data_send = 0xb1 : data_read = 0xb1 : Correct data_send = 0xd3 : data_read = 0xd3 : Correct data_send = 0x1f : data_read = 0x1f : Correct data_send = 0xf4 : data_read = 0xf4 : Correct ----------------------- 7). 总结 如上述示例,通过基于 iMX6 测试了 GPIO , I2C , PWM 和 SPI 接口,对比 C 代码, libsoc 使用和配置起来更方便简洁。