# HiEuler_PI_Peripherals_Driver **Repository Path**: hieulerpi/HiEuler_PI_Peripherals_Driver ## Basic Information - **Project Name**: HiEuler_PI_Peripherals_Driver - **Description**: 海鸥派外设驱动代码仓库 - **Primary Language**: C/C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-27 - **Last Updated**: 2026-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HiEuler_PI_Peripherals_Driver ### 1. 说明 ​ 此代码仓为海鸥派外设驱动代码仓库。 ### 2. 驱动说明 #### 1). gpio ​ gpio是内核态控制驱动,默认控制引脚为海鸥派40Pin管脚Pin13(GPIO2_1)。 ``` insmod gpio_driver.ko gpio_chip_num=2 gpio_offset_num=1 gpio_dir=1 gpio_out_val=0 #拉低 insmod gpio_driver.ko gpio_chip_num=2 gpio_offset_num=1 gpio_dir=1 gpio_out_val=1 #拉高 ``` #### 2). hi_adc ​ hi_adc是ADC驱动,加载驱动前需要配置ADC管脚复用,参数auto_run为1时默认开启ADC,否则需要调用应用层API开启,`cat /proc/hi_adc`即可获取当前ADC值,海鸥派40Pin管脚中的ADC为`LSADC_CH3`。 ![image-20250726170545276](./README.assets/hi_adc_proc.png) #### 3). i2c_soft ​ i2c_soft是GPIO模拟IIC的驱动代码,由于管脚限制,4路Sensor输入时,IIC不够用,此时需要加载GPIO模拟IIC驱动。 #### 4). oled ​ oled是i2c_oled驱动代码。 ##### ①. 硬件连接 | 舵机引脚 | 海鸥40Pin预留IO | | -------- | --------------- | | VCC (5V) | 5V (Pin4) | | GND | GND (Pin6) | | SCL | SCL (Pin5) | | SDA | SDA (Pin3) | ##### ②. 加载驱动 板端加载驱动并检查设备节点。 ![oled驱动加载](./README.assets/oled驱动加载.png) ##### ③.功能验证 a. 直接通过 Shell 指令即可实现交互: | 指令格式 | 功能说明 | 示例 | | :------------- | :--------------------------- | :---------------------------------------------- | | `clear` | 快速清空屏幕 | `echo clear > /dev/oled-1` | | `brightness:N` | 设置亮度 (0-255),默认亮度127 | `echo brightness:200 > /dev/oled-1` | | `text:x,y:MSG` | 静态设置x,y显示文字 | `echo "text:x,y:WAITING" > /dev/oled-1` | | `text:MSG` | 静态居中显示文字 | `echo "text:WAITING" > /dev/oled-1` | | `scroll:MSG` | 从右向左循环滚动文字 | `echo "scroll:System Booting..." > /dev/oled-1` | | `icon:NAME` | 显示内置高清图标 | `echo "icon:wink" > /dev/oled-1` | | `anim:blink` | 进入随机自动眨眼模式 | `echo "anim:blink" > /dev/oled-1` | b. Sample API调用: ``` ./oled_driver_sample ``` ![oled运行](./README.assets/oled运行.png) #### 5). Tsensor ​ Tsensor是海鸥派主控SS928V100的芯片温度传感器驱动,主要用于获取主控的芯片温度,加载驱动后,cat /proc/Tsensor即可获取当前主控的温度。 ![image-20250725102604508](./README.assets/Tsensor_proc.png) #### 6). ws73_sdk_linux_WS73_1.10.111 ​ ws73_sdk_linux_WS73_1.10.111是WS73星闪、蓝牙、WIFI三合一模块驱动,已针对编译报错进行了修改,可以直接编译使用。 #### 7). lcd_touch_driver ​ lcd_touch_driver是SPI LCD屏幕和CST328触摸屏驱动代码,包含`spilcd_driver.ko`、`cst328_driver.ko`和`spilcd_driver_sample`示例程序。SPI LCD通过`/dev/spi_lcd`设备节点接收清屏、背光、文本显示等命令,CST328触摸屏通过Linux input子系统上报触摸坐标。 ##### ①. 硬件连接 | LCD引脚 | 功能 | EULER_40PEXP扩展板 | EULER_40PEXP扩展板丝印 | 说明 | | --- | --- | --- | --- | --- | | VCC | 3.3V/5V | J6 Pin2 (3.3V) | V | 请保证供电电压和逻辑电压一致,否则会导致无法正常工作 | | GND | GND | J6 Pin1 (GND) | G | 电源地 | | MISO | SPI 输入 | - | | 本设备为SPI从设备,本引脚不可用 | | MOSI | SPI 输出 | J8 Pin9 (SPI2_SDO) | DO | 本设备为SPI从设备 | | SCLK | SPI 时钟线 | J8 Pin5 (SPI2_SCLK) | CK | SPI时钟线 | | LCD_CS | SPI 片选 | J8 Pin3 (SPI2_CSN) | CS | SPI片选脚 | | LCD_DC | LCD 选择信号引脚 | J7 Pin7 (GPIO10_3) | TMS | LCD信号控制引脚,L:命令 H:数据 | | LCD_RST | LCD 复位 | J7 Pin6 (GPIO10_4) | TDO | LCD复位引脚,低复位 | | LCD_BL | LCD 背光控制 | J7 Pin5 (GPIO10_5) | TDI | LCD背光控制,调节PWM占空比控制 | | TP_SDA | Touchpad 数据引脚 | J6 Pin4 (I2C0_SDA) | D | 触控板数据引脚 | | TP_SCL | Touchpad 时钟引脚 | J6 Pin3 (I2C0_SCL) | K | 触控板时钟引脚 | | TP_INT | Touchpad 中断引脚 | J8 Pin2 (GPIO2_1) | G21 | 触控板中断引脚,当有手指按下,触发中断 | | TP_RST | Touchpad 复位引脚 | J8 Pin8 (GPIO10_0) | G10 | 触控板复位引脚,低复位 | ##### ②. 引脚复用 ​ 加载驱动前需要先配置SPI、I2C和GPIO管脚复用。 ``` # MOSI -> SPI2_SDO bspmm 0x102F00CC 0x12F1 # SCLK -> SPI2_SCLK bspmm 0x102F00C8 0x12F1 # CS -> SPI2_CSN bspmm 0x102F00D4 0x12F1 # LCD_DC -> GPIO10_3 bspmm 0x102F0108 0x1101 # LCD_RST -> GPIO10_4 bspmm 0x102F010C 0x1101 # LCD_BL -> GPIO10_5 bspmm 0x102F0110 0x1101 # TP_SDA -> I2C0_SDA bspmm 0x102F013C 0x2031 # TP_SCL -> I2C0_SCL bspmm 0x102F0140 0x2031 # TP_INT -> GPIO2_1 bspmm 0x10230044 0x1200 # TP_RST -> GPIO10_0 bspmm 0x102F00FC 0x1201 ``` ##### ③. 加载驱动 ​ 板端加载LCD和触摸驱动,并检查设备节点。若`spi2.0`当前绑定在`spidev`驱动上,需要先解绑`spidev`,再加载`spi_lcd`驱动;也可以在驱动加载后,通过`bind`/`unbind`在`spidev`和`spi_lcd`之间切换。 ``` echo spi2.0 > /sys/bus/spi/drivers/spidev/unbind insmod spilcd_driver.ko insmod cst328_driver.ko ``` ![SPILCD驱动加载](./README.assets/spilcd_driver_load.png) 驱动已加载后,可手动切换`spi2.0`绑定的SPI驱动。 ``` # 切换到spi_lcd驱动 echo spi2.0 > /sys/bus/spi/drivers/spidev/unbind echo spi2.0 > /sys/bus/spi/drivers/spi_lcd/bind # 切换回spidev驱动 echo spi2.0 > /sys/bus/spi/drivers/spi_lcd/unbind echo spi2.0 > /sys/bus/spi/drivers/spidev/bind ``` ##### ④. echo指令验证 ​ 直接通过Shell指令即可实现LCD背光、清屏和文本显示。 | 命令类型 | 写入内容格式 / 关键字 | 默认值 / 行为说明 | | :--- | :--- | :--- | | **背光开启** | `echo "bl_on" > /dev/spi_lcd` 或 `echo 1 > /dev/spi_lcd` | 开启LCD屏幕背光 | | **背光关闭** | `echo "bl_off" > /dev/spi_lcd` 或 `echo 0 > /dev/spi_lcd` | 关闭LCD屏幕背光 | | **清屏** | `echo "clear:001F" > /dev/spi_lcd` | 清空屏幕为指定RGB565颜色,示例为蓝色 | | **简易文本** | `echo "text:<文本>" > /dev/spi_lcd` | 坐标默认为`(0,0)`,颜色默认为纯白(`0xFFFF`) | | **标准文本** | `echo "text:,:<文本>" > /dev/spi_lcd` | 在指定坐标绘制文本,颜色默认为纯白(`0xFFFF`) | | **高级文本** | `echo "text:,,0x<颜色>:<文本>" > /dev/spi_lcd` | 在指定坐标以指定RGB565颜色绘制文本 | ##### ⑤. Sample API调用 ​ 运行`spilcd_driver_sample`示例程序后,可按菜单选择不同LCD显示和触摸交互功能。 ``` ./spilcd_driver_sample ``` ![SPILCD Sample菜单](./README.assets/spilcd_sample_usage.png) Usage7功能说明: - **动态设备侦测**:自动遍历`/sys/class/input`,定位并打开CST328触摸屏输入节点 - **实时坐标 HUD**:手指触摸时在屏幕底部显示X, Y坐标,松开后恢复为`Touch: Unidentified` - **背景色调切换**:点击屏幕上方(除退出按钮外)循环切换Navy、Teal、Maroon等莫兰迪背景色 - **平滑退出动画**:点击红色`EXIT`按钮,触发由上至下白光扫掠擦除动画并安全退出 ![SPILCD触摸交互控制台](./README.assets/spilcd_touch_console.jpg)