跳转至

OLED Driver Integration

Introduction

This module facilitates platform-specific initialization of OLED displays by providing a standardized initialization parameter structure. It decouples the generic OLED driver from platform-specific details (I2C bus selection, display models, timing parameters, etc.).

Integration Flow

Platform Code (board/system initialization)

  1. Initialize the I2C bus using platform-specific code
  2. Create a [CFBD_OLED_IICInitsParams](Classes/structCFBD__OLED__IICInitsParams.md) structure with:
    • I2C bus handle
    • Device address (0x3C or 0x3D for typical OLED displays)
    • Device-specific callbacks and configuration
    • Optional I2C callback for transaction status
  3. Call OLED driver's init function with the parameters

Typical Platform Initialization

// In platform/board initialization code

// Step 1: I2C bus is already initialized
extern CFBD_I2CHandle i2c1_bus;

// Step 2: Define OLED device specifics (e.g., SSD1306)
extern CFBD_OLED_DeviceSpecific ssd1306_specs;

// Step 3: Create initialization parameters
CFBD_OLED_IICInitsParams oled_params = {
    .i2cHandle = &i2c1_bus,
    .accepted_time_delay = 1,                // 1 tick delay
    .device_address = 0x3C,                  // SSD1306 default
    .device_specifics = &ssd1306_specs,
    .iic_transition_callback = my_iic_handler
};

// Step 4: Initialize OLED
int status = CFBD_OLED_Init(&oled_params);
if (status != OLED_OK) {
    // Handle initialization error
    handle_error();
}

Supported Device Models

The framework supports multiple OLED controller models through the [CFBD_OLED_DeviceSpecific](Classes/structCFBD__OLED__DeviceSpecific.md) structure:

  • SSD1306: 128×64 I2C OLED displays
  • SSD1309: Enhanced variant with higher speeds
  • SH1106: Alternative controller (less common)

Callback Pattern

The I2C transition callback enables asynchronous notification when I2C transactions complete:

void my_iic_handler(int status) {
    if (status == I2C_OK) {
        // I2C transaction succeeded
        signal_display_updated();
    } else if (status == I2C_ERR_NACK) {
        // Display not responding
        log_error("Display not found on I2C bus");
    } else if (status == I2C_ERR_TIMEOUT) {
        // Transaction timeout
        log_error("Display I2C timeout");
    }
}

Timing Configuration

The accepted_time_delay parameter controls inter-transaction delays. This is useful for:

  • Allowing display controller time to process commands
  • Pacing rapid consecutive updates
  • Accommodating system scheduler granularity

Updated on 2026-02-03 at 13:21:55 +0000