Serial Expansion HAT
| ||||||||||||||||
| ||||||||||||||||
说明
产品介绍
Serial Expansion HAT是一款专为树莓派设计的串口扩展板,可通过I2C扩展两路UART通道和8个可编程IO
特点
- 基于Raspberry Pi 40pin GPIO接口,适用于Raspberry Pi系列主板
- 板载SC16IS752,可通过I2C扩展两路UART通道和8个可编程IO,不需要占用额外管脚
- 通过改变地址跳线可同时接入多达16个模块,相当于扩展出32个串口
- 板载多个指示灯,方便查看UART扩展接口的工作状态
- 预留I2C控制接口,方便接入其他主控板
- 提供完善的配套资料手册(提供C与python例程)
产品参数
- 工作电压:3.3V
- 扩展芯片:SC16IS752
- 控制接口:I2C
- 产品尺寸:65mm × 30mm
- 过孔直径:3.0mm
资源介绍
SC16IS752是双通道高性能的UART扩展芯片,还能额外提供8个可编程IO口,支持SPI和I2C两种接口通信,本模块默认使用I2C接口,并可更改A0与A1的连线方式来改变I2C设备地址。
接口介绍
标识 | 描述 |
3V3 | 3.3V电源 |
GND | 电源地 |
TXDA | 通道A数据输出端 |
RXDA | 通道A数据输入端 |
RTSA | 通道A请求发送 |
CTSA | 通道A允许发送 |
TXDB | 通道B数据输出端 |
RXDB | 通道B数据输入端 |
RTSB | 通道B请求发送 |
CTSB | 通道B允许发送 |
LED灯介绍
PWR:电源指示灯
TXDA: 通道A数据发送指示灯
RXDA: 通道A数据接收指示灯
TXDB: 通道B数据发送指示灯
RXDB: 通道B数据接收指示灯
I2C设备地址设置说明
A0, A1列为控制I2C硬件地址,通过焊接0R电阻选择地址,它们的对应关系如下表格:
详见datasheet:Page39
可以看到表中的列出来的地址均为8位数据,在实际操作中的I2C地址7位,所以需要往最低位移一位。 比如说第一个A1和A0接到VDD, 表格中给出来的地址是0x90(1001 000X), 但是实际使用的时候,对应的设备地址应该时,100 1000, 即0x48.
【注意】本模块默认焊接A0和A1到3.3V,默认I2C地址为:0X48
通过计算,理论上可以在一个控制器上同时控制32个设备。
购买日期早于2019年12月31日为老版本,老版本由于PCB上中断管脚已经直连了,因此无法在树莓派上堆叠,需要使用杜邦线连接;
购买日期晚于2019年12月31日为新版本,需要手动焊接更改默认的中断管脚,最大支持5个堆叠,如果需要叠加更多的,需要使用杜邦线连接
对树莓派而言,使用杜邦线连接理论上不能达到连接32个,因为扩展一块就需要一个中断引脚,树莓派没有那么多的GPIO
树莓派使用
开启I2C接口
- 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config 选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动
sudo reboot
安装库
如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用,python库可以不安装,直接运行程序即可
BCM2835
#打开树莓派终端,并运行以下指令 wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz tar zxvf bcm2835-1.71.tar.gz cd bcm2835-1.71/ sudo ./configure && sudo make && sudo make check && sudo make install # 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
wiringPi
#打开树莓派终端,并运行以下指令 cd sudo apt-get install wiringpi #对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级: wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb gpio -v # 运行gpio -v会出现2.52版本,如果没有出现说明安装出错 #Bullseye分支系统使用如下命令: git clone https://github.com/WiringPi/WiringPi cd WiringPi ./build gpio -v # 运行gpio -v会出现2.70版本,如果没有出现说明安装出错
lgpio
wget https://github.com/joan2937/lg/archive/master.zip unzip master.zip cd lg-master sudo make install # 更多的可以参考官网:https://github.com/gpiozero/lg
- python库
sudo apt-get install python-dev sudo apt-get install python-rpi.gpio sudo apt-get install python-smbus
生成设备
- 在/boot/config.txt中加入如下
sudo nano /boot/config.txt # addr根据A0A1实际焊接方式设置,默认是0X48 dtoverlay=sc16is752-i2c,int_pin=24,addr=0x48 # 重启设备 sudo reboot
- 重启后,SC16IS752的驱动会加载到系统内核中,此时可以运行ls /dev查看一下 将会多出如下设备:
其中GPIOchip对应的是8个GPIO驱动(2020-02-13之前的生成的是gpiochip3,之后的系统生成的是gpiochip2),ttysc0和ttysc1为两个串口驱动
如果需要堆叠的话,第二个模块不能直接插在树莓派,由于PCB上使用的中断引脚是一样,会导致无法识别出多个设备。
此时应该使用杜邦线连接,并 保证中断引脚不一致。同时config.txt中的命令应该修改为
dtoverlay=sc16is752-i2c,int_pin=xx,addr=0x48
xx为你实际插的BCM编码引脚
测试程序
下载例程
wget http://www.waveshare.net/w/upload/b/ba/Serial_Expansion_HAT_code.tar.gz tar zxvf Serial_Expansion_HAT_code.tar.gz sudo chmod 777 -R Serial_Expansion_HAT_code cd Serial_Expansion_HAT_code
测试串口
- c语言,默认波特率115200
#默认通过串口A发送数据 cd c/uart/send make clean make sudo ./uart_send
#默认通过串口B接收数据 cd c/uart/receive/ make clean make sudo ./uart_receive
- 测试
为了方便测试,把TXDA连接至RXDB,RXDA连接至TXDB,打开两个终端,一个终端先运行接收端程序,另一个终端再运行发送端程序。
测试现象:每隔100毫秒将发送一个ascii字符到接受端,接受端接收到~字符即结束阻塞监听。
如果接外部的串口,要共地处理。
- python,默认波特率115200
cd python/Uart/ #默认通过串口A发送数据 sudo python send.py #默认通过串口B接收数据 sudo python receive.py
测试现象:若是接收端,会进入接收状态,终端打印接收到的程序。发送端会立即发送设置好的字符串。
测试扩展GPIO
- c语言
cd c/gpio/ make clean make sudo ./main
运行程序后,程序会翻转GPIO0的电平,如果在GPIO0上接上LED灯,会发现LED灯闪烁
- python
cd python/GPIO sudo python gpio.py
运行程序后,程序翻转GPIO0的电平几次,如果GPIO0上接上LED灯,会发现LED灯闪烁五次之后常亮,另外GPIO1被设置为输入模式,你可以将GPIO1分别接到3.3V和GND查看一下状态
叠加教程
如果你不仅需要一个,你需要扩展多个串口需要按照如下操作(适用于新版本)。
安装i2c-tools,方便查看I2C地址,在控制台输入:
sudo apt-get install i2c-tools
等待安装成功,执行如下命令查看I2C地址。
sudo i2cdetect -y 1
如果默认已经插入了一个Serial Expansion HAT,那么执行如下命令会得到如下的效果:
其中0X48的设备显示成了UU,说明系统已经加载成功了。运行ls /devttySC*可以查看到已经生成了两个串口设备了。
在叠加第二块模块的之前,需要修改相应的硬件设置,将板子上的默认INT与I2C address的配置改成与默认的不一致即可,这里将需要叠加的另一块板改了:INT PIN改成P23,I2C Address的A0改到了GND:
修改完成之后,将模块叠加在之前的模块上,运行命令:
新的模块的I2C地址为0X49,前面已经修改了中断管脚为23,那么我们就可以打开/boot/config.txt中加入如下配置:
sudo nano /boot/config.txt
在之前配置下方加入如下,保存并退出(ctrl +x,然后执行Y,并回车):
dtoverlay=sc16is752-i2c,int_pin=23,addr=0x49
sudo reboot
执行如下命令,会出现4个设备号,叠加即成功了。
由于系统限制,目前支持最大叠加数为4个,后续会支持更多
FAQ
可以堆叠,需要修改板子I2C电阻和中断管脚电阻,同时config.txt中的命令需要修改对应的中断引脚
- 树莓派装了主流的ubuntu系统可以使用;
- 不可以在树莓派中直接更改config.txt文件,在树莓派打开boot文件夹里config.txt为空文件,一般是改不了;
- 而是将树莓派的SD卡通过读卡器在电脑下(或者其它能识别SD卡的主机)读取和更改config.txt文件。