智芯微版的智能融合終端的驅動程序詳細說明


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選項。

當設備掉電時候,注冊的信號處理函數就會被系統調用。然后在回調函數中,讀取引腳狀態,來獲取是在失電狀態還是在上電狀態。

示例代碼如下:

 

釘釘群:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM