智芯微版的智能融合终端的驱动程序详细说明
1 驱动程序详细说明
按照硬件相关功能性能需求,在理论和实际应用测试基础上展开驱动程序详细说明。
1.1 GPIO与中断
GPIO与中断共用同一设备节点,/dev/gpio_sg,通过 IOCTL 对IO和中断进行访问、控制。简单代码示例如下:
使用时,使用 fd = open(gpiodrv, O_RDWR|O_NOCTTY|O_NDELAY) 打开 /dev/gpio_sg 设备,正常打开后,即可通过 ioctl 进行操作了。其中 gpio_idx 为IO的枚举序号,具体GPIO和中断枚举说明如下:
GPIO枚举说明
序号 |
GPIO |
枚举代号 |
枚举数 |
功能说明 |
1 |
PB09 |
ltepw |
0 |
LTE模块电源控制,0开,1关 |
2 |
PH17 |
lterst |
1 |
LTE模块电源控制,0低,1高,常态为高,低电平有效 |
3 |
PH16 |
lteonf |
2 |
LTE模块ON/OFF控制,0低,1高,常态为高,低电平有效 |
4 |
PH15 |
ltepctrl |
3 |
LTE加热引脚,0低,1高,常态为低,高电平有效 |
5 |
PB08 |
uart1ms |
4 |
RS232/RS485可切换串口1模式切换IO |
6 |
PG09 |
uart2ms |
5 |
RS232/RS485可切换串口2模式切换IO |
7 |
PF01 |
mcu1rst |
6 |
MCU1重置IO |
8 |
PD06 |
mcu2rst |
7 |
MCU2重置IO |
9 |
PH24 |
plcrst |
8 |
载波模块重置IO |
10 |
PD02 |
leduartm1 |
9 |
RS232/RS485可切换串口1模式指示灯 |
11 |
PH06 |
leduartm2 |
10 |
RS232/RS485可切换串口2模式指示灯 |
12 |
PB02 |
lte2rst |
11 |
LTE2重置IO |
13 |
PB03 |
lte2onf |
12 |
LTE2 ON/OFF 控制IO |
14 |
PH27 |
plc12v |
13 |
载波12V控制IO |
15 |
PH18 |
usbuartrst |
14 |
USB转串口重置IO |
16 |
PH19 |
blerst |
15 |
BLE蓝牙重置IO |
17 |
PH25 |
encryptrst |
16 |
加密模组重置IO |
18 |
PH23 |
blects |
17 |
BLE蓝牙CTS |
19 |
PH21 |
ledrsv1 |
18 |
预留LED1 |
20 |
PH22 |
ledrsv2 |
19 |
预留LED2 |
中断枚举说明
序号 |
GPIO |
枚举代号 |
枚举数 |
功能说明 |
1 |
PH11 |
uart1msk |
0 |
RS232/RS485可切换串口1模式选择按键中断 |
2 |
PH10 |
uart2msk |
1 |
RS232/RS485可切换串口2模式选择按键中断 |
3 |
PH08 |
plcplg |
2 |
载波模块插入检测中断 |
4 |
PH02 |
lteplg |
3 |
4G模块插入检测中断 |
5 |
PH13 |
exethintr |
4 |
外部中断 |
6 |
PH00 |
pt100intr |
5 |
pt100中断 |
目前支持的 IOCTL 信号如下:
#define TGPIO_IOC_MAGIC 'T'
#define TGPIO_IOC_GETVAL _IOR(TGPIO_IOC_MAGIC, 1, __u8)
#define TGPIO_IOC_GETSTA _IOR(TGPIO_IOC_MAGIC, 2, __u8)
#define TGPIO_IOC_SETHIGH _IOW(TGPIO_IOC_MAGIC, 2, __u8)
#define TGPIO_IOC_SETLOW _IOW(TGPIO_IOC_MAGIC, 3, __u8)
#define TGPIO_IOC_TOGGLE _IOW(TGPIO_IOC_MAGIC, 4, __u8)
依次为:
1、 获取GPIO当前值,操作方法:
ret = ioctl(fd, TGPIO_IOC_GETVAL, &gpio_idx)
返回值ret为ioctl的是否成功的标志,返回为0表示设置成功,GPIO当前值将返回到 gpio_idx 变量;
2、 获取中断当前状态,操作方法:
ret = ioctl(fd, TGPIO_IOC_GETSTA, &intr_idx)
返回值ret为ioctl的是否成功的标志,返回为0表示设置成功,GPIO当前值将返回到 intr_idx 变量;
3、 设置IO状态为高,
ret = ioctl(fd, TGPIO_IOC_SETHIGH, &gpio_idx);
返回值ret为ioctl的是否成功的标志,返回为0表示设置成功。
4、 设置IO状态为低,
ret = ioctl(fd, TGPIO_IOC_SETLOW, &gpio_idx)
返回值ret为ioctl的是否成功的标志,返回为0表示设置成功。
5、 设置IO状态反向,
ret = ioctl(fd, TGPIO_IOC_TOGGLE, &tmp)
返回值ret为ioctl的是否成功的标志,返回为0表示设置成功。
同时,中断通过 FASYNC 信号将发生的中断通知到应用层,应用层收到SIGIO的信号后,遍历中断引脚,以获取中断引脚状态,具体代码如下:
1.2 加密芯片
TTU目前配备SC1187Y与SC1168Y两款加密芯片,设备节点分别为/dev/encryption0和/dev/encryption1,通过 ioctl 对加密芯片ESAM进行读写操作,使用方法如下:
1、 定义相关结构体:
struct encryption_reg_req {
int buflen;
char* bufdata;
};
2、定义IOCTL相关信号:
#define ESAM_GET_DATA _IOW('E', 0x01, struct encryption_reg_req)
#define ESAM_SET_DATA _IOW('E', 0x02, struct encryption_reg_req)
3、打开加密芯片设备,进行 ioctl 操作,一次写、读交互示例如下:
1.3 串口
TTU使用4路UART实现两路RS485串口、两路RS232/RS485可切换串口,设备节点与串口对应关系为:
串口与设备节点对应关系
UART |
设备节点 |
对应串口 |
GPIO状态 |
3 |
/dev/ttySZ3 |
RS485-1 |
- |
4 |
/dev/ttySZ4 |
RS485-2 |
- |
5 |
/dev/ttySZ5 |
RS485-3 |
PB08为高电平 |
6 |
/dev/ttySZ6 |
RS485-4 |
PB09为高电平 |
7 |
/dev/ttySZ5 |
RS232-1 |
PB08为低电平 |
8 |
/dev/ttySZ6 |
RS232-2 |
PB09为低电平 |
串口打开
fd = open( "/dev/ttySZ3", O_RDWR|O_NOCTTY|O_NDELAY)
打开后进行配置,配置无校验、9600波特率操作如下:
之后,通过 read(fd, buff, len) 和 write(fd, buff, len) 进行读写即可。
1.4 PT100 I2C温度传感器
Pt100温度传感器设备节点为 /dev/pt100-i2c ,打开后直接通过read进行数据读取,每次读取4个int长度的数据,,每两个int型数据为一组,分别为整数部分和小数部分,具体操作如下:
1.5 ledwan驱动说明
ledwan的设备节点是/dev/ledwan,打开后,写入一个单字节的数值代表,代表让ledwan灯的亮灭和闪烁。
写入0代表ledwan灯灭
写入1代表 ledwan灯亮
写入2代表ledwan灯闪烁
下图示例代码是控制ledwan灯闪烁
1.6 ledctrl驱动说明
ledctl的设备节点是/dev/ledctl,打开后直接,写入一个单字节的数值代表,代表让ledctl灯的亮灭和闪烁。
写入0代表ledctl灯灭
写入1代表 ledctl灯亮
写入2代表ledctrl灯闪烁
下图示例代码是控制ledctl灯常亮
1.7 di17驱动说明
di17的设备节点是/dev/di17,设备打开后,读取单个字节的数据,读取得到的数值为0,或者1
0代表上盖状态正常
1代表上盖被打开
下图是读取di17状态的示例代码
1.8 di18驱动说明
di18的设备节点是/dev/di18,设备打开后,读取单个字节的数据,读取得到的数值为0,或者1
0代表尾盖状态正常
1代表尾盖被打开
下图是读取di18状态的示例代码
1.9 input_irq驱动说明
input_irq对应设备掉电上电引脚,input_irq驱动的设备节点是/dev/input_irq,设备打开后,注册设备掉电信号的对应的信号处理函数,然后当前任务和驱动实现挂接,获取文件标志位flag,为文件flag添加FASYNC选项。
当设备掉电时候,注册的信号处理函数就会被系统调用。然后在回调函数中,读取引脚状态,来获取是在失电状态还是在上电状态。
示例代码如下:
钉钉群: