HOME
Shop
  • English
  • 简体中文
HOME
Shop
  • English
  • 简体中文
  • Product Series

    • FPGA+ARM

      • GM-3568JHF

        • Introduction

          • GM-3568JHF Introduction
        • Quick Start

          • Preface
          • Environment Setup
          • Compilation Notes
          • Flashing Guide
          • Debugging Tools
          • Software Update
          • Viewing System Information
          • Test Commands
          • Application Compilation
          • Source Code Access
        • Peripherals & Interfaces

          • USB
          • Display and Touch
          • Ethernet
          • WIFI
          • Bluetooth
          • TF-Card
          • Audio
          • Serial Port
          • CAN
          • RTC
        • Application Development

          • UART Read/Write Demo
          • Key Detection Demo
          • LED Blink Demo
          • MIPI Screen Detection Demo
          • Read USB Device Information Demo
          • FAN Detection Demo
          • FPGA FSPI Communication Demo
          • FPGA DMA Read/Write Demo
          • GPS Debugging Demo
          • Ethernet Test Demo
          • RS485 Read/Write Demo
          • FPGA I2C Read/Write Demo
          • PN532 NFC Card-Reading Demo
          • TF Card Read/Write Demo
        • QT Development

          • ARM64 Cross-Compiler Environment Setup
          • Adding a QT Program to Boot Auto-Start
        • RKNN_NPU Development

          • RK3568 NPU Overview
          • Development Environment Setup
          • Run the Official YOLOv5 Example
        • FPGA Development

          • ARM and FPGA Communication
          • FPGA Development Manual
        • Others

          • Modifying the Root Filesystem
          • System Auto-Start Services
        • Downloads

          • Downloads
      • MB-E30P

        • Introduction

          • MB-E30P Introduction
        • Quick Start

          • Preface
          • Environment Setup
          • Compilation Instructions
          • Flashing Guide
          • Debugging Tools
          • Software Update
          • Viewing Information
          • Test Commands
          • Application Compilation
          • Source Code Acquisition
        • Peripherals & Interfaces

          • USB
          • Display and Touch
          • Ethernet
          • WIFI
          • Bluetooth
          • TF-Card
          • Audio
          • RTC
        • Application Development

          • Key Detection Demo
          • LED Blink Demo
          • MIPI Screen Detection Demo
          • Read USB Device Information Demo
          • FAN Detection Demo
          • FPGA FSPI Communication Demo
          • FPGA DMA Read/Write Demo
          • Ethernet Test Demo
          • FPGA IIC Read/Write Demo
          • PN532 NFC Card Reading Demo
          • TF Card Read/Write Demo
        • QT Development

          • ARM64 Cross-Compiler Environment Setup
          • Adding a QT Program to the Boot Auto-Start Service
        • RKNN_NPU Development

          • RK3568 NPU Overview
          • Development Environment Setup
          • Run the Official YOLOv5 Example
          • Model Conversion In Detail
          • Run Custom Models on the Board
        • FPGA Development

          • ARM and FPGA Communication
          • FPGA Development Manual
        • Others

          • Modifying the Root Filesystem
          • System Auto-Start Service
        • Downloads

          • Downloads
    • ShimetaPi

      • M4-R1

        • Introduction

          • M4-R1 Introduction
        • Quick Start

          • OpenHarmony Overview
          • Image Burning
          • Application Development Quick Start
          • Device Development Quick Start
        • Application Development

          • ArkUI

            • ArkTS Language Overview
            • UI Components - Row Container Introduction
            • UI Components - Column Container Introduction
            • UI Components - Text Component
            • UI Components - Toggle Component
            • UI Components - Slider Component
            • UI Components - Animation Component & Transition Component
          • Documentation

            • OpenHarmony Official Materials
          • Development Notes

            • Full-SDK Replacement Tutorial
            • Introducing and Using Third-Party Libraries
            • HDC Debugging
            • Restore Factory Mode via Command Line
            • Upgrade App to System Permission
          • First App

            • Build Your First ArkTS Application - HelloWorld
          • Demos

            • Serial-Debug-Assistant Application Demo
            • Writing-Board Application Demo
            • Digital Clock Application Demo
            • Wi-Fi Information Acquisition Application Demo
        • Device Development

          • Ubuntu Development

            • Environment Setup
            • Download Source Code
            • Compile Source Code
          • DevEco Device Tool

            • Tool Introduction
            • Development Environment Construction
            • Import the SDK
            • HUAWEI DevEco Tool Function Introduction
        • Kernel Peripherals & Interfaces

          • Guide
          • Device Tree Introduction
          • NAPI Introduction
          • ArkTS Introduction
          • NAPI Development Hands-on Demo
          • GPIO Introduction
          • I2C Communication
          • SPI Communication
          • PWM Control
          • UART Communication
          • TF Card (MicroSD)
          • Screen (Display)
          • Touch
          • Ethernet
          • M.2 SSD
          • Audio
          • WIFI & BT
          • Camera
        • Downloads

          • Downloads
      • M5-R1

        • Introduction

          • M5-R1 Development Docs
        • Quick Start

          • Image Burning
          • Environment Setup
          • Download Source Code
        • Peripherals & Interfaces

          • Raspberry Pi Interfaces
          • GPIO Interface
          • I2C Interface
          • SPI Communication
          • PWM Control
          • Serial Port Communication
          • TF Card
          • Display
          • Touch
          • Audio
          • RTC
          • Ethernet
          • M.2
          • MINI-PCIE
          • Camera
          • WIFI & BT
        • Downloads

          • Downloads
      • Pico-G1

        • Product Overview

          • Product Introduction
          • SDK Version Information
        • Quick Start

          • Development Environment Setup
          • Image Build
          • Image Flashing
          • System Login
          • Network Configuration
          • File Transfer
          • SDK Directory Structure
          • Deploying Your First Application
          • Deploying Your First Driver
          • Mounting an SD Card
        • Peripherals & Interfaces

          • GPIO Control
          • UART Serial Communication
          • I2C Communication
          • SPI Communication
        • MPP Media Development

          • MPP Media Processing Software
          • Image Processing Chain
          • Video Input
          • Image Encoding
        • NPU & AI

          • NPU Driver and Runtime Library Architecture
          • .xmm Model Loading
          • SVP Video Processing
          • AI Noise Reduction (AI_NR)
        • Application Samples

          • Encryption/Decryption Application
          • ADC Acquisition Application
          • Low-Power Application
          • Audio Processing Application
          • Video Encoding Application
          • Video Input Application
          • Video Graphics Subsystem (VGS) Application
          • 08 Region Overlay Application
          • 09 Intelligent Video Engine Application
          • 10 UVC Webcam Application
          • 11 All-in-One Quickstart Application
          • 12 FPN Correction Application
          • 13 Regional Motion Detection Application
          • 14 MTCNN Face Detection Application
        • Expansion Board Peripheral Examples

          • 00 - Pico Expansion Board Peripheral Examples Overview
          • 01 - OLED Display Application
          • 02 - TFT Display Application
          • 03 - MPU6050 Gyroscope Application
          • 04 - ADC Acquisition Application
          • 05 - Passive Buzzer Application
          • 06 - MQ Gas Sensor Application
          • 07 - GPS Positioning Application
          • 08 - SHT20 Temperature & Humidity Application
          • 09 - Ultrasonic Ranging Application
          • 10 - SpO2 Sensor Application
          • 11 - DC Motor Control Application
          • 12 - Servo Control Application
    • OpenHarmony

      • SC-3568HA

        • Introduction

          • SC-3568HA Overview
        • Quick Start Guide

          • OpenHarmony Overview
          • Image Flashing
          • Setting Up the Development Environment
          • Hello World Application and Deployment
        • Application Development

          • ArkUI

            • Introduction to ArkTS Language
            • Introduction to UI Components and Practical Applications (Part 1)
            • Introduction to UI Components and Practical Applications (Part 2)
            • Introduction to UI Components and Practical Applications (Part 3)
          • Expand

            • Getting Started Guide
            • Referencing and Using Third-Party Libraries
            • Application Compilation and Deployment
            • Command-Line Factory Reset
            • System Debugging -- HDC Debugging
            • APP Stability Testing
            • Chapter 7 Application Testing
        • Device Development

          • Environment Setup
          • Download Source Code
          • Compiling Source Code
        • Peripheral And Interface

          • Raspberry Pi interface
          • GPIO Interface
          • I2C Interface
          • SPI communication
          • PWM (Pulse Width Modulation) control
          • Serial port communication
          • TF Card
          • Display Screen
          • Touch
          • Audio
          • RTC
          • Ethernet
          • M.2
          • MINI-PCIE
          • Camera
          • WIFI&BT
          • Raspberry Pi expansion board
        • Downloads

          • Downloads
      • M-K1HSE

        • Introduction

          • M-K1HSE Introduction
        • Quick Start

          • Development environment construction
          • Source code acquisition
          • Compilation Notes
          • Burning Guide
        • Application Development

          • Application Development Environment Setup
          • First Application - Hello World
        • Peripherals and interfaces

          • 01 Audio
          • 02 RS485
          • 03 Display
        • System customization development

          • System transplant
          • System customization
          • Driver Development
          • System Debugging
          • OTA Update
        • Downloads

          • Downloads
    • HVS Camera

      • Quick Start

        • SDK Overview
        • Downloads
        • Your First C++ Program
        • Python Data Analysis
        • MultiVision Studio
      • Development

        • Programming Guides

          • Open Camera
          • Read Events
          • Recording & Replay
          • Event Processing (Denoising)
          • Display & Visualization
          • Tuning
          • Capture APS Image
        • Toolkit SDK

          • Hybrid Vision Toolkit
          • Quick Start
          • C++ API
          • Python API
        • Algorithm

          • Hybrid Vision Algo
          • Hybrid Vision Algo API
          • Windows Algo SDK
        • Samples Overview
        • Applications
      • Fundamentals

        • Event Camera Fundamentals
        • HVS Hybrid Vision
        • Event Visualization
        • Data Formats Reference
        • Glossary
        • Bias & Tuning
        • Video Tutorials
      • USB Cameras

        • HVS Camera Quick Start
        • Networking Capabilities

          • HVS Camera System Architecture
          • EVS Network Server
          • EVS Time Sync
          • Web Window
        • HVS Camera Compatibility Matrix
        • FAQ & Troubleshooting Guide
        • Products

          • CF-NRS1 (Lingguang No.1 Hybrid Vision Camera)
      • MIPI Modules

        • MIPI Module Quick Start
        • Carrier Boards

          • RDK X5 Carrier Board Adaptation
          • Raspberry Pi Carrier Board Adaptation
          • Digua Pi Carrier Board Adaptation
          • ShimeTai Board Carrier Board Adaptation
        • MIPI Module Compatibility Matrix
        • Products

          • EVS_003 Sensor Module
    • AI-model

      • 1684XB-32T

        • Introduction

          • AIBOX-1684XB-32 Introduction
        • Quick Start

          • First Use
          • Network Configuration
          • Disk Usage
          • Memory Allocation
          • Fan Control Strategy
          • Firmware Upgrade
          • Cross Compilation
          • Model Quantization
        • Application Development

          • Development Overview

            • Sophgo SDK Development
            • Sophgo Demo Introduction
          • Large Language Models

            • Deploying Llama3 Example
            • Sophon LLM_api_server Development
            • Deploying MiniCPM-V-2_6
            • Qwen-2-5-VL Image and Video Recognition Demo
            • Qwen3-chat Demo
            • Qwen3-Qwen Agent-MCP Development
            • Qwen3-langchain-AI Agent
          • Deep Learning

            • ResNet (Image Classification)
            • LPRNet (License Plate Recognition)
            • SAM (General Image Segmentation Foundation Model)
            • YOLOv5 (Object Detection)
            • OpenPose (Human Keypoint Detection)
            • PP-OCR (Optical Character Recognition)
        • Downloads

          • Downloads
      • 1684X-416T

        • Introduction

          • AIBOX-1684X-416 Introduction
        • Demo Quick Guide

          • ShimeTai Intelligent Monitoring Demo Quick Usage Guide
      • RDK-X5

        • Introduction

          • RDK-X5 Hardware Introduction
        • Quick Start

          • RDK-X5 Quick Start
        • Application Development

          • AI Online Model Development

            • Experiment 01 - Access Volcengine Doubao AI
            • Experiment 02 - Image Analysis
            • Experiment 03 - Multimodal Visual Analysis & Localization
            • Experiment 04 - Multimodal Image-Text Comparison
            • Experiment 05 - Multimodal Document/Table Analysis
            • Experiment 06 - Camera-based AI Visual Analysis
          • Large Language Models

            • Experiment 01 - Speech Recognition
            • Experiment 02 - Voice Conversation
            • Experiment 03 - Multimodal Image Analysis - Voice
            • Experiment 04 - Multimodal Image Comparison - Voice
            • Experiment 05 - Multimodal Document Analysis - Voice
            • Experiment 06 - Multimodal Vision Application - Voice
          • ROS2 Basics

            • Experiment 01 - Environment Setup
            • Experiment 02 - Create & Build a Workspace Package
            • Experiment 03 - Run ROS2 Topic Communication Node
            • Experiment 04 - ROS2 Camera Application
          • 40-pin IO Development

            • Experiment 01 - GPIO Output (LED Blink)
            • Experiment 02 - GPIO Input
            • Experiment 03 - Button-controlled LED
            • Experiment 04 - PWM Output
            • Experiment 05 - Serial Output
            • Experiment 06 - I2C Experiment
            • Experiment 07 - SPI Experiment
          • USB Module Usage

            • Experiment 01 - USB Voice Module Usage
            • Experiment 02 - Sound Source Localization Module
          • Machine Vision Practice

            • Experiment 01 - Open USB Camera
            • Experiment 02 - Color Recognition
            • Experiment 03 - Gesture Recognition
            • Experiment 04 - YOLOv5 Object Detection
      • RDK-S100

        • Introduction

          • RDK-S100 Hardware Introduction
        • Quick Start

          • RDK-S100 Quick Start
        • Application Development

          • AI Online Model Development

            • Experiment 01 - Access Volcengine Doubao AI
            • Experiment 02 - Image Analysis
            • Experiment 03 - Multimodal Visual Analysis & Localization
            • Experiment 04 - Multimodal Image-Text Comparison
            • Experiment 05 - Multimodal Document/Table Analysis
            • Experiment 06 - Camera-based AI Visual Analysis
          • Large Language Models

            • Experiment 01 - Speech Recognition
            • Experiment 02 - Voice Conversation
            • Experiment 03 - Multimodal Image Analysis - Voice
            • Experiment 04 - Multimodal Image Comparison - Voice
            • Experiment 05 - Multimodal Document Analysis - Voice
            • Experiment 06 - Multimodal Vision Application - Voice
          • ROS2 Basics

            • Experiment 01 - Environment Setup
            • Experiment 02 - Create & Build a Workspace Package
            • Experiment 03 - Run ROS2 Topic Communication Node
            • Experiment 04 - ROS2 Camera Application
          • 40-pin IO Development

            • Experiment 01 - GPIO Output (LED Blink)
            • Experiment 02 - GPIO Input
            • Experiment 03 - Button-controlled LED
            • Experiment 04 - PWM Output
            • Experiment 05 - Serial Output
            • Experiment 06 - I2C Experiment
            • Experiment 07 - SPI Experiment
          • USB Module Usage

            • Experiment 01 - USB Voice Module Usage
            • Experiment 02 - Sound Source Localization Module
          • Machine Vision Practice

            • Experiment 01 - Open USB Camera
            • Experiment 02 - Image Processing Basics
            • Experiment 03 - Object Detection
            • Experiment 04 - Image Segmentation
      • RK1828

        • Introduction

          • M5-182X-A1 AI Edge Box - Product Introduction
          • M5-182X-A1 Hardware Specifications
          • M5-182X-A1 Usage & Safety
        • Quick Start

          • M5-182X-A1 Image Flashing
          • RK182X Hardware Installation & Verification
          • RK182X Development Environment Quick Setup
          • RK182X SDK Overview
          • RK182X Environment Setup in Detail
          • RK182X Quick Start
          • Vendor SDK Data Extraction Record
        • Development Guide

          • ClawChips Architecture and Principles
          • SKILL User Manual
          • RK182X Series LLM Inference (RK1828 Model)
          • RK182X Series CNN Inference (RK1828 Model)
          • Model Conversion
          • RK182X AI Agent Application Development Guide
          • RK182X Industrial Anomaly Detection Application
        • SDK Reference

          • RKNN3-SDK Overview

            • RKNN3 SDK Overview
          • RKNN3-Toolkit

            • RKNN3 Toolkit Installation and Usage
          • RKLLM

            • RKLLM On-Device LLM Inference
          • RK182X Series NPU Overview and Architecture (RK1828 Model)
          • RK182X INT8 Quantized Inference Deployment
          • RK182X MPP Multimedia Framework
          • MPP Details

            • RK182X Video Decoding
            • RK182X Video Encoding
          • NPU Details

            • RKNN Model Conversion
            • RK182X NPU INT8 Quantized Inference
            • RK182X Multi-Model Parallel Inference
          • RGA Details

            • RK182X RGA 2D Graphics Acceleration
          • VPU Details

            • RK182X VPU Codec
        • Hardware Reference

          • RK182X Series Hardware Architecture Overview (RK1828 Model)
          • RK182X Pin Definitions and Multiplexing Configuration
          • RK182X Pin Definitions
          • RK182X Power Management
          • RK182X Clock and PLL Configuration
          • RK182X Clock and Frequency Configuration
        • Tutorials

          • Hello World
          • Hello RK1828 - The First Program
          • RTSP Streaming
          • RTSP Streaming + AI Analysis
          • ShiMetaPi AI Lobster One-Click Deployment
          • PaddleOCR-VL Text Recognition
          • Qwen3-1.7B LLM Text Chat
          • AI Multi-View Inspection (Qwen3-VL Wrapper)
          • YOLOv5 Object Detection
        • Downloads

          • Downloads
        • FAQ

          • FAQ
    • Core-Board

      • C-3568BQ

        • Introduction

          • C-3568BQ Overview
      • C-3588LQ

        • Introduction

          • C-3588LQ Overview
      • GC-3568JBAF

        • Introduction

          • GC-3568JBAF Overview
      • C-K1BA

        • Introduction

          • C-K1BA Overview
    • Software Platform

      • ShiMetaPi Workbench

        • Introduction

          • Product Overview
          • Core Architecture
          • Feature Entries
          • Supported Hardware
          • Release Notes
        • Quick Start

          • Install & Login
          • Connect the Device
          • Set Up the Environment
          • Connect to AIHub
          • First Inference
        • User Guide

          • Workspace Overview
          • Device Manager
          • Model Market
          • One-Click Deploy
          • Vision — SVP
          • Vision - Custom Models
          • shimeta-py IDE
          • Terminal
          • Agent Debug Assistant
          • Settings and Resources
        • FAQ

          • Installation & Login
          • Device Connection
          • Models & Deployment
          • Vision & Runtime
          • Settings & Other
      • ShimetaPi Repository

        • Introduction

          • ShimetaPi Software Repository
        • Pico G1 (GK7206)

          • Quick Start

            • Installation & First Inference
            • shimeta_infer — Image Inference
            • shimeta_camera — Real-time Camera Inference
            • SVP Scene Detection
            • File Transfer & Built-in Model Reference
            • FAQ
          • HTTP API & Python SDK

            • HTTP API Reference
      • Model Fine-tuning Platform

        • Introduction

          • Model Training Platform
        • Quick Start

          • Register & Login
          • Create Your First Model (30-Minute Quick Experience)
        • Training Guide

          • Data Preparation & Annotation
          • Training Parameter Configuration
          • Start & Monitor Training
          • Model Evaluation & Testing
        • Model Deployment

          • Export Model
          • Deploy to Edge Device

Driver Development

Sensor driver development

  • Overview

Sensor is a common input device used to sense the state of the environment and achieve corresponding responses. Compared with the original Linux driver mode, OH implements the sensor driver in the HDF (Hardware Driver Foundation) layer. This implementation method can achieve one-time development and support deployment in different kernel environments, such as lightweight systems, small systems or standard Linux systems. In addition, in the HDF framework, different drivers can be managed uniformly, and each driver can provide services to the outside world. For the application layer, it only needs to call the HDI (Hardware Device Interface) interface to obtain the driver service capabilities.

Sensor Driven Model

The Sensor driver model based on the HDF driver framework in OpenHarmony is as follows:

FIRMWARE

The sensor driver model shields the differences in hardware devices and provides a stable sensor basic capability interface for the upper-level sensor service system, including sensor list query, sensor start and stop, sensor subscription and unsubscription, sensor parameter configuration and other functions.

The development of sensor device drivers is based on the HDF driver framework, combining the operating system abstraction layer (OSAL) and platform driver interface (such as I2C/SPI/UART bus and other platform resources) capabilities to shield the differences in bus resources between different operating systems and platforms, and achieve the goal of "one-time development, multi-system deployment" for sensor drivers.

The sensor driver model in OpenHarmony is divided into the following levels:

Hardware: This layer determines how the sensor device is connected to the CPU, what method the peripheral uses to communicate (such as I2C, SPI, GPIO, etc.), etc. Driver: This layer implements hardware peripheral drivers, including bindInit and realese functions in HdfDriverEntry, and ReadData in data OpsCall. HDI: Interface definition and implementation. The interface mainly includes all stable interfaces such as sensor information query, sensor start and stop, sensor subscription/unsubscription, sensor parameter configuration, etc., to simplify service development. Framework: Upper-level sensor service.

HCS Configuration

For different platforms, you need to modify the corresponding hcs file in the corresponding platform directory. The following example shows the modification method for adding a sensor module under the smt001 platform. Configure device_info.hcs File path: vendor/spacemit/smt001/hdf_config/khdf/device_info/device_info.hcs Configuration instructions: Add the following information in device_info.hcs.

Main field description:

policy: service policy. The value "0" means not to publish the service, the value "1" means to publish the service to the kernel state, and the value "2" means to publish the service to the user state. moduleName: the same as the moduleName in the HdfDriverEntry structure implemented by the driver. deviceMatchAttr: the private configuration information of the driver. serviceName: the service name, and the serviceName node will eventually be generated under the /dev/ node (the prerequisite for generating the node is that the policy is configured to be greater than or equal to 1).

Configure sensor_config.hcs

File path: vendor/spacemit/smt001/hdf_config/khdf/sensor/sensor_config.hcs Configuration instructions: Add the following content to sensor_config.hcs: #include "accel/accel_qm8658_config.hcs"

Configure accel_qm8658_config.hcs File path: vendor/spacemit/smt001/hdf_config/khdf/sensor/accel/accel_qm8658_config.hcs

Configuration instructions: Add a new folder accel and create a new file accel_qm8658_config.hcs. The file content is as follows:

#include"../sensor_common.hcs"
root{
    accel_qm8658_chip_config:sensorConfig{
        match_attr="hdf_sensor_accel_qm8658_driver";
        sensorInfo::sensorDeviceInfo{
            sensorName="accelerometer";
            vendorName="qmi8658";//maxstringlengthis16bytes
            sensorTypeId=1; //enum SensorTypeTag
            sensorId=1;//userdefinesensorid
            power=230;
        }
        sensorBusConfig::sensorBusInfo{
            busType=0; //0:i2c1:spi
            busNum=3;
            busAddr=0x6a;
            regWidth=1;//1btye
        }
        sensorIdAttr::sensorIdInfo{
            chipName="qm8658";
            chipIdRegister=0x00;
            chipIdValue=0x05;
        }
        sensorRegConfig{
            /*regAddr:registeraddress
            value:configregistervalue
            len:sizeofvalue
            mask:maskofvalue
            delay:configregisterdelaytime(ms)
            opsType:enumSensorOpsType0-none1-read2-write3-read_check4-update_bit
            calType:enumSensorBitCalType0-none1-set2-revert3-xor4-leftshift5-rightshift
            shiftNum:shiftbits
            debug:0-nodebug1-debug
            save:0-nosave1-save
            */
            /*regAddr,value,mask,len,delay,opsType,calType,shiftNum,debug,save*/
            initSeqConfig=[
                0x02,0x78, 0xff,1,5, 2,0,0,0,0,
                0x03,0x26, 0xff,1,5, 2,0,0,0,0,
                0x08,0x00,0x03,1,5, 2,0,0,0,0
            ];
            enableSeqConfig=[
                0x08,0x01,0x03,1,5, 2,0,0,0,0
            ];
            disableSeqConfig=[
                0x08,0x00,0x03,1,5, 2,0,0,0,0
            ];
        }
    }
}

Compile option modification

Add the following content in drivers/hdf_core/adapter/khdf/linux/model/sensor/Kconfig:

config DRIVERS_HDF_SENSOR_ACCEL_QM8658
    bool "Enable HDF accel qm8658 sensor driver"
    default n
    depends on DRIVERS_HDF_SENSOR_ACCEL
    help
        Answer Y to enable HDF accel qm8658 sensor driver.

Add the following content in drivers/hdf_core/adapter/khdf/linux/model/sensor/Makefile: obj-$(CONFIG_DRIVERS_HDF_SENSOR_ACCEL_QM8658)+=$(SENSOR_ROOT_DIR)/chipset/accel/accel_qm8658.o Modify the corresponding driver implementation file of Makefile as follows:

drivers/peripheral/sensor/chipset/accel/accel_qm8658.c
drivers/peripheral/sensor/chipset/accel/accel_qm8658.h

Kernel defconfig configuration

Add the following content to kernel/linux/spacemit_kernel-6.6/arch/riscv/configs/k1_defconfig file:

CONFIG_DRIVERS_HDF_SENSOR=y
CONFIG_DRIVERS_HDF_SENSOR_ACCEL=y
CONFIG_DRIVERS_HDF_SENSOR_ACCEL_QM8658=y

Application Code Directory Description

The interface implementations of the Sensor driver's external services are all in the drivers/peripheral/sensor path. The corresponding functions of this directory are described as follows:

/drivers/peripheral/sensor
├── hal
    └── include
    └── src
├── interfaces
    └── include
├── test
    └── unit
hal: HAL layer code for the sensor module
include: Internal header files for the sensor module's HAL layer
src: Implementation of the sensor module's HAL layer code
interfaces: Driver capability interfaces provided by the sensor module to upper-layer services
include: Interface definitions exposed by the sensor module
test: Test code for the sensor module
unit: Unit test code for the sensor module

Common Problem Solving

Confirm the accuracy of HCS configuration, including I2C bus, Sensor register initialization, Sensor enable, etc. Confirm whether the compilation options have been modified to compile it normally. If the application cannot be enabled, confirm whether the module needs to be configured with permissions and whether to touch hdf.hcs to change the timestamp.

TouchScreen driver development

Overview

TouchScreen is a common input device that senses the user's touch on the screen and responds accordingly. Compared with the original Linux driver mode, OpenHarmony implements the TouchScreen driver in the HDF layer. This implementation method can achieve one-time development and support deployment in different kernel environments, such as lightweight systems, small systems, or standard Linux systems. In addition, in the HDF framework, different drivers can be managed uniformly, and each driver can provide services to the outside world. For the application layer, it only needs to call the HDI interface to obtain the driver service capabilities.

TouchScreen driver model

The TouchScreen driver model based on the HDF driver framework in OpenHarmony is as follows:

FIRMWARE

The TouchScreen driver model in OpenHarmony is divided into the following layers: Hardware: This layer determines how the TouchScreen device is connected to the CPU, which IO ports the peripherals are configured through, what method (such as I2C, SPI, UART, etc.) is used for communication, etc. Kernel: This layer mainly selects the appropriate kernel (Linux/LiteOS/RTOS) according to the needs of the project; the OSAL APIs in the Kernel layer are mainly used to normalize different kernels, provide a standardized operation interface for the HDF Drivers layer, and shield the differences between different kernels from causing modifications to the upper layer to the greatest extent.

HDF Drivers: This layer implements hardware peripheral drivers and completes the initialization of different peripherals. For example, TouchScreen needs to implement the Init, Detect, Resume, Suspend, DataHandle, and UpdateFirmware functions in struct TouchChipOps ops. Input HDI: This layer implements driver interface capabilities such as TouchScreen device management, business control, and data reporting, and provides hardware driver capabilities for the upper layer. Framework: Upper-layer TouchScreen services.

HCS Configuration

For different platforms, you need to modify the corresponding hcs file in the corresponding platform directory. The following example shows the modification method for adding a GT9271 touch screen under the smt001 platform.

Configure device_info.hcs File path: vendor/spacemit/smt001/hdf_config/khdf/device_info/device_info.hcs Configuration instructions: Add the following content to device_info.hcs.

Main field description:

policy: service policy. The value "0" means not to publish the service, the value "1" means to publish the service to kernel mode, and the value "2" means to publish the service to kernel user mode. moduleName: the same as the moduleName in the HdfDriverEntry structure implemented by the driver. deviceMatchAttr: the private configuration information of the driver. serviceName: the service name, and the serviceName node will eventually be generated under the /dev/ node (the prerequisite for generating the node is that the policy is configured to be greater than or equal to 1).

Configure input_config.hcs

File path: vendor/spacemit/smt001/hdf_config/khdf/input/input_config.hcs Configuration instructions: Modify the following configuration in input_config.hcs.

Modify the configuration and add chip4 in the chipConfig field to indicate a new touch screen driver.

Compile option modification

The following takes the driver of the newly added touch screen GT9271 as an example to introduce the relevant compilation option modifications.

Add the following content in drivers/hdf_core/adapter/khdf/linux/model/input/Kconfig:

config DRIVERS_HDF_TP_10P10_GT9271
    bool "Enable HDF tp10P10 GT9271

UART driver development

Overview

UART refers to Universal Asynchronous Receiver/Transmitter. In the HDF framework, the interface adaptation mode of UART adopts the independent service mode. In this mode, each device object will independently publish a device service to handle external access. After the device manager receives the access request from the API, it extracts the parameters of the request to achieve the purpose of calling the corresponding internal method of the actual device object. The advantage of the independent service mode is that it can directly use the service management capabilities of HDFDeviceManager, but it also has certain shortcomings, that is, it is necessary to configure the device node for each device separately, which will increase the memory usage. The structure diagram of the UART independent service mode is shown in the figure below.

FIRMWARE

DTS Configuration

Configuration Instructions

Configure the corresponding serial port device node, for example, configure serial port 2:

&uart2 {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_uart2>;
    status = "okay";
};

HCS Configuration

For different platforms, you need to modify the corresponding hcs file in the corresponding platform directory.

Configuring device_info.hcs

File Path

vendor/spacemit/xxx/hdf_config/khdf/device_info/device_info.hcs

Configuration Instructions

Add the following content to device_info.hcs:

During the configuration process, pay attention to the following points:

Policy: Set the node to hide or show. The value "1" means hiding, that is, HDF nodes are not displayed in the dev directory; the value "2" means showing, that is, HDF nodes are displayed in the dev directory. Permission: file permissions. Priority: startup sequence, the larger the value, the later it starts. The suffix "2" of "HDF_PLATFORM_UART_2" in serviceName: corresponds to the port parameter of the application open function.

deviceMatchAttr: must be consistent with the match_attr value in rk3568_uart_config.hcs.

Configure rk3568_uart_config.hcs

File Path

vendor/spacemit/xxx/hdf_config/khdf/platform/rk3568_uart_config.hcs

Configuration Instructions

Modify rk3568_uart_config.hcs as follows:

During the configuration process, pay attention to the following points:

The suffix "0x0002" in device_uart_0x0002 is the serial port number, starting from 0x0000. Num: It is combined with the driver_name value "ttyS" to form the driver device name, such as ttyS9.

If the driver device name does not start with ttyS, for example, the driver device names of serial ports A to D of the RK3568A board start with ttyXRUSB, you need to modify the driver_name. For example:

device_uart_0x0002 :: uart_device {
    num = 9;
    driver_name = "ttyXRUSB"
    match_attr = "rockchip_rk3568_uart_9";
}

If you do not modify the driver_name, the driver_name value in the template, that is, "ttyS", is used by default.

Application usage process

For details on how to use the UART API interface, see the OHOS API documentation.

Commonly used UART APIs are described as follows: uartOpen(port: number): port is the suffix number of serviceName in the "Configure device_info.hcs" section. uartSetBaud: Set the baud rate of the specified serial port. uartSetAttribute: Set the basic attributes of the specified serial port.

Common Problem Solving

Confirm whether there is a tty device generated under /dev/. If not, please refer to the "DTS Configuration" section to check the configuration. Confirm whether there is HDF_PLATFORM_UART_x generated under /dev/ (x is the configured service_name). If not, please refer to the "HCS Configuration" section to check the configuration.

Data read and write does not work: Short RX and TX, and test through two hdc terminals, one cat tty node and one echo tty node. If the cat terminal does not receive data: Please make sure that the pinctrl - 0 in the "DTS Configuration" section selects the correct serial port pin. Check and ensure that the hardware circuit is normal.

Sending is normal, but reading data is lost: Please check whether there are other applications grabbing data.

Check for hardware interference.

Edit this page on GitHub
Prev
System customization
Next
System Debugging