树莓派CM4(二): UART/IIC/SPI调试
1. 参考资料
- 资料汇总页面
- 《bcm2711-peripherals.pdf》,下载地址
https://datasheets.raspberrypi.com/bcm2711/bcm2711-peripherals.pdf
- 《cm4io-datasheet.pdf》,下载地址
- 《cm4-product-brief.pdf》,下载地址
https://datasheets.raspberrypi.com/cm4/cm4-product-brief.pdf
- 《cm4-datasheet.pdf》,下载地址
2. 串口配置
2.1 概述
- 树莓派
CM4共有六路UART,均由GPIO复用而来 - 一个
mini UART(UART1)用作调试串口 + 五个PL011串口(UART0/2/3/4/5) - 如下图中白框所示,详情见
《bcm2711-peripherals.pdf》的5.3. Alternative Function Assignments章节

2.2 调试串口mini UART
mini UART- 为控制台预留,见《bcm2711-peripherals.pdf》的2.2章节- 需要修改
/boot/config.txt或/boot/firmware/config.txt,在其末尾添加如下内容以启用调试串口enable_uart=1
2.3 其它五路串口
修改
/boot/config.txt,添加如下内容,表示启用UART0/2/3/4/5deoverlay=uart0,txd0_pin=14,rxd0_pin=15
dtoverlay=uart2,txd2_pin=0,rxd2_pin=1
dtoverlay=uart3,txd3_pin=4,rxd3_pin=5
dtoverlay=uart4,txd4_pin=8,rxd4_pin=9
dtoverlay=uart5,txd5_pin_12,rxd5_pin=13
如下图

修改完成后重启生效
2.4 确认所有串口均已启用
查看
dmesg中tty相关的日志,可以看到ttyS0+ttyAMA0 ~ ttyAMA4六路串口均已启用
因为这六路串口都是通过GPIO复用而来的,进一步查看GPIO复用关系,如下图

查看
/dev目录下的ttyAMA节点
GPIO对应关系

结合
dmesg中的日志和上面的GPIO复用关系,可以知道/dev/ttyAMA*和uart的对应关系ttyAMA0 对应 UART0
ttyAMA1 对应 UART2,Tx = GPIO0, Rx = GPIO1
ttyAMA2 对应 UART3,Tx = GPIO4, Rx = GPIO5
ttyAMA3 对应 UART4,Tx = GPIO8, Rx = GPIO9
ttyAMA4 对应 UART5,Tx = GPIO12, Rx = GPIO13
2.5 调试串口测试
调试串口
UART1,GPIO14接Rx,GPIO15接Tx
波特率
115200,连接的电脑后就可以通过该串口进入终端
2.6 其它串口测试
以
UART3为例,短接UART3的Tx和Rx引脚,即短接GPIO4和GPIO5如下图中的黑色杜邦线所示

UART3对应/dev/ttyAMA2,使用minicom打开/dev/ttyAMA2节点

打开
minicom的回显功能,CTRL-A Z打开配置菜单,如下,输入E打开回显

因为我们将UART3的Tx和Rx短接在一起,所以无论输入什么字符,都会看到显示了两次,一次是发送的数据,一次是接收的数据

其它
UART的测试方法同理
3. IIC配置
3.1 参考资料
《bcm2711-peripherals.pdf》的
Chapter 3.BSC章节《cm4io-datasheet.pdf》的
2.9. Fan connector章节《cm4io-datasheet.pdf》的
2.13. Real time clock (RTC)章节《cm4-datasheet.pdf》的
2.9. I2C (SDA0 SCL0)章节《cm4-datasheet.pdf》的
2.5.1. Alternative function assignments章节
3.2 硬件资源
- 树莓派CM4最多可启用5路
i2c - 其中内部的
i2c0使用两个GPIO管脚:SDA0连接在GPIO44上,SCL0连接在GPIO45上; 需要注意的使这两个管脚默认被分配给
CSI1/DIS1使用,只有当CSI1/DSI1未启用时,这两个管脚才能用作通用的i2c接口 CSI/DSI默认是关闭的,使用摄像头和DSI的时候会占用I2C-10/I2C-11/I2C-0三个I2C设备- 关于i2c这一部分有一个疑问:为什么没有
SDA2/SCL2呢?只有SDA0/1/3/4/5/6和SCL0/1/2/3/4/5? - i2c和GPIO的复用关系如下图中绿色框标出来的部分


3.3 启用i2c0
最简单的方法是通过
raspi-config来启用i2c,这种方法已经有不少相关文章了,在此不在赘述,接下来要说的是另一种方式修改
/boot/config.txt或/boot/firmware/config.txt,向其中添加如下内容dtparam=i2c_vc=on
向
/etc/modules中添加i2c-dev$ sudo echo "i2c-dev" >> /etc/modules
$ sudo echo " " >> /etc/modules # 追加一个空行
重启生效
3.4 检查i2c0是否启用成功
- 查看GPIO复用关系表可知,
i2c0的时钟线和数据线由GPIO44/45复用而来 - 查看GPIO复用关系,如下图,可以看到
GPIO44/45被复用为function alt1,正式i2c0的两个管脚sudo cat /sys/kernel/debug/pinctrl/fe200000.gpio-pinctrl-bcm2711/pinmux-pins

3.5 使用i2c-tools进行调试
安装i2c调试工具
i2c-toolssudo apt-get install -y i2c-tools
查看所有的
i2c总线sudo i2cdetect -l

注意:硬件上
i2c0 SDA0/SCL0对应的是这里的i2c-10, 参考《cm4io-datasheet.pdf》的2.9. Fan connector章节我在
i2c0上接了一个数字温度传感器,地址0x49查看
i2c-10上有哪些设备,只需要关注0x49即可$ sudo i2cdetect -y 10
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- 49 -- -- -- -- -- --
50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 71 72 73 -- -- -- --尝试读取一下温度,0x29换算一下正好是41℃
$ sudo i2cget -f -y 10 0x49
0x29
4. SPI配置
4.1 参考资料
- 《bcm2711-peripherals.pdf》的
2.3. Universal SPI Master (2x)章节
4.2 硬件资源
- 树莓派CM4最多可启用五路SPI,
SPI0/1/3/4/5/6,问题:和i2c一样,为什么没有SPI2 ? - 另外,虽然从GPIO复用表中能够找到六路SPI的管脚定义,但是有些SPI的管脚是冲突的,最多只能启用五路SPI
4.3 使能SPI
- 在
SPI0上连接一个2 inch的显示屏,分辨率240 * 320,官方资料如下
https://www.waveshare.net/wiki/2inch_LCD_Module#.E4.B8.8A.E5.B1.82.E5.BA.94.E7.94.A8
原理图如下

使能SPI,使用
raspi-config可以很方便地开启SPI;这里选择使用另一种方式:修改config.txt的方式来使用SPI修改
/boot/firmware/config.txt,取消#dtparam=spi=on这一行的注释,如果没有相关内容,手动添加之

重启生效,重启后就能够看到SPI对应的设备节点
/dev/spidev0.0和/dev/spidev0.1
4.4 SPI屏幕输出
- 安装
libraspberrypi-dev$ sudo apt-get install libraspberrypi-dev
FBCP移植FBCP (Framebuffer Copy)用于将帧缓冲中的内容复制到一个显示设备上直接在树莓派中进行编译,避免交叉编译
获取源码,安装相关依赖
$ wget https://www.waveshare.net/w/upload/1/18/Waveshare_fbcp.zip
$ unzip Waveshare_fbcp.zip
$ cd Waveshare_fbcp/
$ sudo chmod +x ./shell/*
$ sudo apt-get install -y cmake unzip
修改编译脚本
./shell/waveshare-2inch,修改如下#!/bin/bash # 清空编译输出目录
sudo rm -rf $(dirname "$0")/../build
mkdir $(dirname "$0")/../build
# 进入编译输出目录
cd $(dirname "$0")/../build
# cmake构建Makefile
sudo cmake -DSPI_BUS_CLOCK_DIVISOR=20 -DWAVESHARE_2INCH_LCD=ON -DBACKLIGHT_CONTROL=ON -DSTATISTICS=0 ..
# 开始编译
sudo make -j$(nproc)

开始编译
Waveshare_fbcp$ sudo ./shell/waveshare-2inch
编译得到的
fbcp就是所需的驱动程序

安装fbcp到/usr/local/bin/目录下,注意检查是否有可执行权限
Waveshare_fbcp$ sudo cp ./build/fbcp /usr/local/bin/
在
/etc/rc.local中添加如下内容,实现fbcp开机自启sudo fbcp &
修改
/boot/firmware/config.txt,注释掉DRM VC4 V3D相关内容,添加屏幕信息# 注释以下内容
# Enable DRM VC4 V3D driver
# dtoverlay=vc4-kms-v3d
# max_framebuffers=2 hdmi_force_hotplug=1
max_usb_current=1
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_cvt 320 240 60 6 0 0 0
hdmi_drive=2
display_rotate=90 # 我是将屏幕横过来使用的,故需要旋转90°
重启,正常情况下就能够看到屏幕显示了,并且会产生一个新的设备节点
/dev/fb0

4.5 使用FFmpeg在屏幕上播放视频
安装
ffmpeg$ sudo apt-get install -y ffmpeg
由于屏幕的分辨率是
320 * 240,需要将视频转成相应的分辨率后才能完美播放,可以参考下面的命令$ ffmpeg -i input.mp4 -vf "scale=320:-1" output.mp4
播放视频,循环播放;注意:必须要指定使用
/dev/fb0播放$ sudo ffmpeg -re -stream_loop -1 -i /home/jun/output.mp4 -vf "setpts=1.0*PTS" -pix_fmt bgra -f fbdev /dev/fb0
显示效果

写在最后
禁止转载到CSDN !!! 其它随意,转载请注明出处
树莓派CM4(二): UART/IIC/SPI调试的更多相关文章
- 一从二主IIC连接调试
最近有个项目需要实现快速开机出摄像头预览(2s内),但是我的板子linux上的qt应用起来都要10s左右了,于是在硬件上增加了一个屏驱芯片TW8836,这是一个mcu,可以直接获取摄像头数据送到lcd ...
- 采用FPGA实现UART转SPI
应用笔记 V1.1 2015/2/10 采用FPGA实现UART转SPI 概述 本文提供了实现UART转SPI的Verilog代码的功能描述.这份笔记将介绍UART和SPI的基本知识,代码设计 ...
- [原创]树莓派CM4配置GPIO复用为i2c
1.简介 项目中需要控制各种外设的电源,正常应该是通过GPIO进行控制,但是树莓派CM4的GPIO管脚有限,因此需要使用i2c扩展IO 查阅CM4-datesheet发现GPIO22和GPIO23可以 ...
- PX01关于手机屏IIC触摸调试学习笔记
相关文件下载: 上位机工具:http://www.xk-image.com/download/blog/0002_TP调试/LcdTools20210605.rar 调试案例:http://www.x ...
- Uart、SPI和I2C的区别
串口通信:UART.SPI.I2C区别[引用] 1.UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少.数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快.在多机通信上面 ...
- 调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置
调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (三)使用Windbg调试SQLSERVER ...
- 【转】android 电容屏(二):驱动调试之基本概念篇
关键词:android 电容屏 tp 工作队列 中断 多点触摸协议平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung ...
- MIP开发教程(二) 使用MIP-CLI工具调试MIP网页
初始化 MIP 配置 新建一个 MIP 网页 编写 MIP 网页代码 校验 MIP 网页 调试 MIP 网页 1. 初始化 MIP 配置 首先在html目录下进行初始化 MIP 配置: $ mip i ...
- 关于树莓派Pi2通过UART连接攀藤G5传感器的python
1.准备工作:树莓派Pi2板子,攀藤G5传感器 关于树莓派40pin口网上很多,我们只了解与攀藤G5连接的问题 (1)攀藤G5pin1(VCC5v)要注意是5V,有很多板子接的是3V,而树莓派的pin ...
- 通信方案软件设计(环形动态申请内存,支持USART+IIC+SPI+CAN协议
1 <STM32进阶之串口环形缓冲区实现>中讲得比较清楚(链接) 2 amobbs中讲的方法有点复杂,以下是链接和参考源码: 通信方案软件设计(环形动态申请内存,支持USART+IIC+S ...
随机推荐
- Django-缓存、信号与序列化
缓存 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作 ...
- power bi权限控制笔记
power bi权限控制:power bi权限控制角色目前只能在desktop 客户端进行创建.报表进行权限控制后,用于行级别安全,需注意:a.对数据集做行级别安全性的角色分配 b.需要进行报表的共享 ...
- 什么是Selenium Grid?如何搭建Selenium Grid?
标签(空格分隔): 测试架构 什么是测试基础架构? 测试基础架构指的是,执行测试的过程中用到的所有基础硬件设施以及相关的软件设施.因此,我们也把测试基础架构称之为广义的测试执行环境.通常来讲,测试基础 ...
- Qt 学习笔记 - 第四章 - Qt的三驾马车之 - 网络编程
Qt 学习笔记全系列传送门: Qt 学习笔记 - 第一章 - 快速开始.信号与槽 Qt 学习笔记 - 第二章 - 添加图片.布局.界面切换 Qt 学习笔记 - 第三章 - Qt的三驾马车之一 - 串口 ...
- WPF实现TextBlock呼吸灯效果
实现代码 <TextBlock Text="录像中" FontSize="48" Foreground="#ED4646" Horiz ...
- 你使用过 Vuex 吗?
Vuex 是一个专为 Vue.js 应用程序开发的状态(全局数据)管理模式.每一个 Vuex 应用的核心就是 store(仓库)."store" 基本上就是一个容器,它包含着你的应 ...
- 阿里云服务器Docket安装RabbitMQ 3.8.12
DocketMQ安装RabbitMQ 地址:https://hub.docker.com/ 拉取镜像 docker pull rabbitmq:3.8.12-management-alpine 运行 ...
- 大一新生的作业(洛谷P1150,1035,1075)
本帖背景:此帖讲解大一新生团队作业 截止日期10-31 17:09 P1150(Peter的烟) 算法简介 本题主要考察的是模拟算法 模拟算法一般考察一些比较基础的题目,它将生活中的实例融合到了编程题 ...
- Java-Cookie客户端会话技术
会话技术 会话:一次对话中包含多次请求和响应 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Cook ...
- MViT:性能杠杠的多尺度ViT | ICCV 2021
论文提出了多尺度视觉Transformer模型MViT,将多尺度层级特征的基本概念与Transformer模型联系起来,在逐层扩展特征复杂度同时降低特征的分辨率.在视频识别和图像分类的任务中,MViT ...