接口介绍
板卡接口
EdgeBoard DK-1配置接口丰富。提供40PIN扩展接口(含GPIO、UART、PWM、I2C、SPI)、RJ45网口、USB接口、全尺寸HDMI接口、3.5mm音频接口、MIPI接口的相机/显示屏接口等。
40PIN接口
接口简介
40PIN接口是EdgeBoard DK-1A为方便嵌入式系统项目开发、快速搭建原型机而提供的扩展接口,使用40PIN接口可以方便的接入各种传感器、模块。
WiringPi 编码 | alt1 func | default func | 物理引脚BOARD编码 | default func | alt1 func | WiringPi 编码 | |
---|---|---|---|---|---|---|---|
3.3V | 1 | 2 | 5V | ||||
SDA0 | 3 | 4 | 5V | ||||
SCL0 | 5 | 6 | GND | ||||
7 | TXD3 | GPIO42 | 7 | 8 | TXD0 | GPIO19 | |
GND | 9 | 10 | RXD0 | GPIO18 | |||
0 | GPIO8 | 11 | 12 | GPIO38 | PWM1 | 1 | |
2 | GPIO9 | 13 | 14 | GND | |||
3 | GPIO10 | 15 | 16 | GPIO37 | 4 | ||
3.3V | 17 | 18 | GPIO36 | 5 | |||
SPI1_SDO | 19 | 20 | GND | ||||
SPI1_SDI | 21 | 22 | GPIO40 | 6 | |||
SPI1_SCLK | 23 | 24 | SPI1_CS0 | ||||
GND | 25 | 26 | SPI1_CS1 | ||||
SDA3 | 27 | 28 | SCL3 | ||||
21 | RXD3 | GPIO43 | 29 | 30 | GND | ||
22 | GPIO12 | 31 | 32 | PWM0 | GPIO39 | 26 | |
23 | GPIO16 | PWM2 | 33 | 34 | GND | ||
24 | PWM3 | GPIO15 | 35 | 36 | GPIO41 | 27 | |
25 | GPIO13 | 37 | 38 | GPIO21 | 28 | ||
GND | 39 | 40 | GPIO11 | 29 |
注意:
1.Pin19、Pin24作为GPIO时仅支持输出模式,不能作为输入接口;
2.Pin8、Pin10默认为系统debug接口,会打印输出相关log信息;
功能 | 引脚 |
UART | UART0_Debug_TX:PIN8(GPIO19) UART0_Debug_RX:PIN10(GPIO18) UART3_TX:PIN7(GPIO42) UART3_RX:PIN29(GPIO43) |
PWM | PMM0:PIN8(GPIO39) PWM1:PIN12(GPIO38) PWM2:PIN33(GPIO33) PWM3:PIN35(GPIO35) |
I2C | I2C0_Data:PIN3 I2C0_Clock:PIN5 I2C3_EEPROM_Data:PIN27 I2C3_EEPROM_Clock:PIN28 |
SPI | SPI1_MOSI:PIN21 SPI1_MISO:PIN19 SPI1_SCLK:PIN23 SPI1_CS0:PIN24 SPI1_CS1:PIN26 |
方案简介
WiringPi方案
EdgeBoard DK-1A默认预装WiringPi库
WiringPi是一个用C语言编写的接口(Raspberry Pi)软件包,它主要用于GPIO引脚控制、串口通信、SPI通信及I2C通信等功能。
WiringPi官方网站WiringPi官网,非官方python版本WiringPi-Python。
为方便广大开发者快速使用,百度在EdgeBoard DK-1A上适配了WiringPi库,但由于底层硬件不完全一致,仍有部分差异,详细适配情况详见下表:
模块 | API | 是否支持 | 功能限制 |
Setup | int wiringPiSetup(void) | Y | |
int wiringPiSetupSys(void) | Y | ||
int wiringPiSetupGpio(void) | Y | ||
int wiringPiSetupPhys(void) | Y | ||
core functions | void pinMode(int pin, int mode) | Y | IN(0), OUT(1), SOFT_PWM(4), SOFT_TONE_OUTPUT(5), PWM_OUTPUT(2) |
void pullUpDnControl(int pin, int pud) | ? | ||
int digitalRead(int pin) | Y | ||
void digitalWrite(int pin, int value) | Y | ||
void pwmWrite(int pin, int value) | Y | ||
int analogRead(int pin, int value) | *2 | ||
void analogWrite(int pin, int value) | *2 | ||
Pi Specifics | void digitalWriteByte(int value) | ? | |
pwmSetMode(int mode) | Y | ||
pwmSetRange(unsigned int range) | Y | ||
pwmSetColck(int divisor) | Y | ||
piBoardRev(void) | ? | ||
wpiPinToGpio(int wPiPin) | Y | ||
physPinToGpio(int physPin) | Y | ||
setPadDrive(int group, int value) | ? | ||
Timing | unsigned int millis(void) | Y | |
unsigned int micros(void) | Y | ||
void delay(unsigned int howLong) | Y | ||
void delayMicroseconds(unsigned int howLong) | Y | ||
Priority, Interrupts and Threads | int piHiPri(int priority) | Y | |
int waitForInterrupt(int pin, int timeOut) | Y | ||
int wiringPiISR(int pin, int edgeType, void (*function)(void)) | Y | ||
pinThreadCreate(name) | Y | ||
piLock(int keyNum) | Y | ||
pinUnlock(int keyNum) | Y | ||
Serial Library | int serialOpen(char *device, int baud) | Y | |
void serialClose(int fd) | Y | ||
void serialPutchar(int fd, unsigned char c) | Y | ||
void serialPuts(int fd, char *s) | Y | ||
void serialPrintf(int fd, char *message, ...) | Y | ||
int serialDataAvail(int fd) | Y | ||
int serialGetchar(int fd) | Y | ||
void serialFlush(int fd) | Y | ||
SPI Library | int wiringPiSPISetup(int channel, int speed) | Y | |
int wiringPiSPIDataRW(int channel, unsigned char *data, int len) | Y | ||
I2C Library | int wiringPiI2CSetup(int devld) | Y | |
int wiringPiI2CRead(int fd) | Y | ||
int wiringPI2CWrite(int fd, int data) | Y | ||
int wiringPiI2CWriteReg8(int fd, int reg, int data) | Y | ||
int wiringPiI2CWriteReg16(int fd, int reg, int data) | Y | ||
int wiringPiI2CReadReg8(int fd, int reg) | Y | ||
int wiringPiI2CReadReg16(int fd, int reg) | Y | ||
Shift Library | uint8_t shiftln(uint dPin, uint8_t cPIN, uint8_t order) | ? | |
void shiftOut(uint8_t dPin, uint8_t cPin, uint8_t order, uint8_t val) | Y | ||
Software PWM Library | int softPwmCreate(int pin, int initialValue, int pwmRange) | Y | |
void softPwmWrite(int pin, int value) | Y | ||
Software Tone Library | int softToneCreate(int pin) | Y | |
void softToneWrite(int pin, int freq) | Y |
gpio命令行工具适配情况如下:
分类 | 子命令/参数 | 是否支持 | 功能限制 | 示例 | 备注 |
usage | -h | Y | gpio -h | 帮助信息 | |
-v | ? | ||||
-g | Y | gpio -g read 11 | 使用bcm gpio number | ||
-1 | Y | gpio -1 read 40 | 使用bcm gpio number | ||
-p | ? | 示例 | 备注 | ||
-x | ? | 示例 | 备注 | ||
input/output | mode | Y | in, out, pwm | gpio mode 28 in/out | 使用wpi number |
write | Y | gpio write 28 up/down | 使用wpi number | ||
pwm | Y | ||||
read | Y | gpio read 28 | 使用wpi number | ||
awrite | ? | ||||
aread | ? | ||||
readall | Y | gpio readall | |||
allreadall | ? | ||||
wfi | ? | ||||
kernel model | load spi | ? | |||
load i2c | ? | ||||
i2c detection | ? | ||||
/sys/class/gpio | export | Y | gpio export 405 out/in | 使用sys gpio number | |
unexport | Y | gpio export 405 | 使用sys gpio number | ||
unexportall | *1 | ||||
exports | *1 | ||||
unexportall | *1 |
其中,是否支持列中:
Y: 已支持
?: 暂未验证
1: 软件可支持,待开发
2: 硬件不支持、废弃、需要拓展模块
WiringPi使用
WiringPi安装
打开终端,输入以下命令安装WiringPi库。
sudo apt update
sudo apt install wiringpi
可使用以下命令查看WiringPi版本,验证是否安装成功。
gpio -v
如打印WiringPi版本信息,则安装成功。
WiringPi接口调用
具体调用可参考WiringPi官方使用流程,Examples/How-To。
其它工具
i2c-tools
i2c-tools是Linux下的一个I2C工具,可以用来检测I2C设备。
i2c-tools的安装:
sudo apt install i2c-tools
i2c-tools的使用: 如查看总线已挂载从设备:
i2cdetect -y -a -r 0
其中0表示0号I2C总线,若设备连接到pin3和pin5上即为0,若连接到pin27和pin28上即为3。 i2ctools的详细用法可参见:https://cloud.tencent.com/developer/article/2009823
python smbus2库
smbus2是python的一个I2C库,可以用来检测I2C设备。 smbus2的安装:
pip install smbus2
smbus2的使用参考:https://pypi.org/project/smbus2/
spi-tools
spi-tools是Linux下的一个SPI工具,可以用来检测SPI设备。 spi-tools的安装:
sudo apt install spi-tools
spi-tools的使用:查看设备:
spi-config -d /dev/spidev0.0 -q
spi-tools的详细用法可参见:spi-tools
spidev工具
安装spidev库
pip install spidev
spidev库详细使用参考:spidev库
Uart-GPIO功能切热换
板卡支持对物理Pin7、Pin29进行Uart-GPIO功能的热切换。
需保证PPOS版本>=1.0.1。若系统版本过低,可参考PPOS查询方法详见系统相关的系统版本查询和系统热更新章节。
打开终端,输入以下命令进行操作
sudo su #切换到root用户
cd /sys/class/tty/ttyS3/device #切换到对应目录
echo uart3 > berlin_uart #切换UART模式
# 此时Pin7和Pin29为UART功能:
# Pin7为TXD
# Pin29为RXD
echo uart3_gpio > berlin_uart #切换GPIO模式
# 此时Pin7和Pin29为GPIO功能:
# Pin7为GPIO42,WiringPi编号7
# Pin29为GPIO43,WiringPi编号21
注:reboot后失效,会恢复默认状态!
RJ45接口
EdgeBoard DK-1A提供1个RJ45接口,通过RJ45接口可连接网络。
USB接口
EdgeBoard DK-1A提供2个TypeA型USB2.0和2个TypeA型USB3.0接口。
3.5mm音频接口
EdgeBoard DK-1A提供3.5mm音频接口。 3.5mm音频接口使用4极CTIA Standard标准,线序为从尖端到根部依次是左声道、右声道、电源地、麦克风,可参考下图:
MIPI接口-CSI
EdgeBoard DK-1A提供1个MIPI接口(2lane),可通过MIPI接口连接CSI摄像头。
HDMI接口
EdgeBoard DK-1A提供1个全尺寸HDMI视频输出接口。
TypeC接口
EdgeBoard DK-1A提供1个TypeC接口,用于设备供电。供电建议为5V3A。可使用USB TypeC接口的电源适配器或者符合电压电流输出要求的充电宝等进行供电。
MIPI接口-DSI
EdgeBoard DK-1A提供1个MIPI接口(2lane),可通过MIPI接口连接DSI显示屏。