資料介紹
Table of Contents
ADPD188 - No-OS Driver
Supported Devices
Overview
The ADPD188BI is a complete photometric system for smoke detection using optical dual wavelength technology. The module integrates a highly efficient photometric front end, two light emitting diodes (LEDs), and two photodiodes (PDs). These items are housed in a custom package that prevents light from going directly from the LED to the photodiode without first entering the smoke detection chamber. The front end of the application specific integrated circuit (ASIC) consists of a control block, a 14-bit analog-to-digital converter (ADC) with a 20-bit burst accumulator, and three flexible, independently configurable LED drivers. The control circuitry includes flexible LED signaling and synchronous detection. The analog front end (AFE) features best-in-class rejection of signal offset and corruption due to modulated interference commonly caused by ambient light. The data output and functional configuration occur over a 1.8 V I2C interface or serial peripheral interface (SPI) port.
Applications:
- Smoke detection
Driver Description
The driver contains two parts:
- The driver for the ADPD188BI part, which may be used, without modifications, with any microcontroller.
- The Communication Drivers, where the specific communication functions for the desired type of processor and communication protocol have to be implemented. This driver implements the communication with the device and hides the actual details of the communication protocol to the ADI driver.
The Communication Driver has a standard interface, so the ADPD188BI driver can be used exactly as it is provided.
the Communication Drivers must include two things: I2C or SPI transmission methods and GPIO control methods. For the I2C method, the ADPD188BI driver calls four functions:
- i2c_init() – initializes the I2C communication peripheral.
- i2c_remove() – frees memory allocated by the I2C communication driver.
- i2c_write() – writes data to the device.
- i2c_read() – reads data from the device.
For the SPI method, the ADPD188BI driver calls three functions:
- spi_init() - initializes the SPI communication peripheral.
- spi_remove() – frees memory allocated by the SPI communication driver.
- spi_write_and_read() – conduct information transfer with the device.
For the GPIO control methods, the ADPD188BI driver calls three functions:
- gpio_get() - initialize GPIO peripheral and allocate memory for one GPIO control.
- gpio_remove() - frees memory allocated by the GPIO control driver.
- gpio_direction_input() - set GPIO as input.
Functions Declarations
Function | Description |
---|---|
int32_t adpd188_init(struct adpd188_dev **device, struct adpd188_init_param *init_param); | Initialize the ADPD188 driver. |
int32_t adpd188_remove(struct adpd188_dev *dev); | Free resources allocated by adpd188_init(). |
int32_t adpd188_reg_read(struct adpd188_dev *dev, uint8_t reg_addr, uint16_t *reg_val); | Read one 16 bit register of the ADPD188. |
int32_t adpd188_reg_write(struct adpd188_dev *dev, uint8_t reg_addr, uint16_t reg_val); | Write one 16 bit register of the ADPD188. |
int32_t adpd188_mode_get(struct adpd188_dev *dev, enum adpd188_mode *mode); | Get the mode of operation of the ADPD188. |
int32_t adpd188_mode_set(struct adpd188_dev *dev, enum adpd188_mode new_mode); | Set the mode of operation of the ADPD188. |
int32_t adpd188_fifo_status_get(struct adpd188_dev *dev, uint8_t *bytes_no); | Get the number of bytes currently present in FIFO. |
int32_t adpd188_fifo_clear(struct adpd188_dev *dev); | Empty the FIFO. |
int32_t adpd188_fifo_thresh_set(struct adpd188_dev *dev, uint8_t word_no); | Set the number of 16 bit words that need to be in the FIFO to trigger an interrupt. |
int32_t adpd188_interrupt_get(struct adpd188_dev *dev, uint8_t *flags); | Get the slot and FIFO interrupt flags. |
int32_t adpd188_interrupt_clear(struct adpd188_dev *dev, uint8_t flags); | Clear the slot and FIFO interrupt flags. |
int32_t adpd188_interrupt_en(struct adpd188_dev *dev, uint8_t flags); | Enable the slot and FIFO interrupt flags. |
int32_t adpd188_gpio_setup(struct adpd188_dev *dev, struct adpd188_gpio_config config); | Setup drive and polarity of the GPIOs. |
int32_t adpd188_gpio_alt_setup(struct adpd188_dev *dev, uint8_t gpio_id, enum adpd188_gpio_alt_config config); | Setup the GPIO source. |
int32_t adpd188_sw_reset(struct adpd188_dev *dev); | Do software reset of the device. |
int32_t adpd188_clk32mhz_cal(struct adpd188_dev *dev); | Do internal 32MHz clock calibration. |
int32_t adpd188_slot_setup(struct adpd188_dev *dev, struct adpd188_slot_config config); | Enable slot and setup its FIFO interaction. |
int32_t adpd188_adc_fsample_set(struct adpd188_dev *dev, float freq_hz); | Set sample frequency of the ADC. |
int32_t adpd188_adc_fsample_get(struct adpd188_dev *dev, float *freq_hz); | Get sample frequency of the ADC. |
int32_t adpd188_smoke_detect_setup(struct adpd188_dev *dev); | Do initial configuration of the device to use as a smoke detector. |
Types Declarations
/** * @union adpd188_phy_init * @brief Communication physical protocol initialization structure. Can be I2C * or SPI. */ union adpd188_phy_init { /** I2C initialization structure. */ struct i2c_init_param i2c_phy; /** SPI initialization structure. */ struct spi_init_param spi_phy; }; ? /** * @enum adpd188_phy_opt * @brief Types of physical communication protocol. */ enum adpd188_phy_opt { /** SPI communication. */ ADPD188_SPI, /** I2C communication. */ ADPD188_I2C }; ? /** * @enum adpd188_mode * @brief ADPD188 operation modes. */ enum adpd188_mode { /** Standby mode. */ ADPD188_STANDBY, /** Program mode. */ ADPD188_PROGRAM, /** Normal mode. */ ADPD188_NORMAL }; ? /** * @enum adpd188_interrupt * @brief Interrupt flags of the ADPD188. */ enum adpd188_interrupt { /** Slot A conversion interrupt flag. */ ADPD188_SLOTA_INT = 0x1, /** Slot B conversion interrupt flag. */ ADPD188_SLOTB_INT = 0x2, /** FIFO threshold reached interrupt flag. */ ADPD188_FIFO_INT = 0x4 }; ? /** * @struct adpd188_gpio_config * @brief GPIO level configuration. */ struct adpd188_gpio_config { /** GPIO ID (0 or 1) */ uint8_t gpio_id; /** GPIO polarity */ uint8_t gpio_pol; /** Status of the GPIO driver (driven or open-drain) */ uint8_t gpio_drv; /** GPIO enable (only for GPIO0) */ uint8_t gpio_en; }; ? /** * @enum adpd188_gpio_alt_config * @brief GPIO source configuration. */ enum adpd188_gpio_alt_config { /** GPIO backwards compatible with the ADPD103 INT functionality. */ ADPD188_ADPD103 = 0x00, /** Interrupt function provided on GPIO. */ ADPD188_INT_FUNC = 0x01, /** * Asserts at the start of the first time slot and deasserts at end of last * time slot. */ ADPD188_ACTIVE_PULSE = 0x02, /** Time Slot A pulse output. */ ADPD188_SLOTA_PULSE = 0x05, /** Time Slot B pulse output. */ ADPD188_SLOTB_PULSE = 0x06, /** Pulse output of both time slots. */ ADPD188_ANYSLOT_PULSE = 0x07, /** Output data cycle occurred for Time Slot A. */ ADPD188_SLOTA_OUT = 0x0C, /** Output data cycle occurred for Time Slot B. */ ADPD188_SLOTB_OUT = 0x0D, /** Output data cycle occurred. */ ADPD188_ANYSLOT_OUT = 0x0E, /** * Toggles on every sample, which provides a signal at half the sampling * rate. */ ADPD188_HALF_SAMPLING = 0x0F, /** Output = 0. */ ADPD188_OUT_LOW = 0x10, /** Output = 1. */ ADPD188_OUT_HIGH = 0x11, /** 32 kHz oscillator output. */ ADPD188_32KHZ_OSC = 0x13 }; ? /** * @enum adpd188_slots * @brief ADPD188 time slots. */ enum adpd188_slots { /** First slot. */ ADPD188_SLOTA, /** Second slot. */ ADPD188_SLOTB }; ? /** * @enum adpd188_slot_fifo_mode * @brief The way a time slot stores data in the FIFO. */ enum adpd188_slot_fifo_mode { /** No data to FIFO. */ ADPD188_NO_FIFO, /** 16-bit sum of all four channels. */ ADPD188_16BIT_SUM, /** 32-bit sum of all four channels. */ ADPD188_32BIT_SUM, /** Four channels of 16-bit sample data for the time slot. */ ADPD188_16BIT_4CHAN = 0x4, /** Four channels of 32-bit sample data for the time slot. */ ADPD188_32BIT_4CHAN = 0x6 }; ? /** * @struct adpd188_slot_config * @brief Slot configuration initialization structure. */ struct adpd188_slot_config { /** Time slot ID. */ enum adpd188_slots slot_id; /** Enable time slot. */ bool slot_en; /** Time slot FIFO mode. */ enum adpd188_slot_fifo_mode sot_fifo_mode; }; ? /** * @struct adpd188_dev * @brief Driver descriptor structure. */ struct adpd188_dev { /** Communication physical type. */ enum adpd188_phy_opt phy_opt; /** Communication physical descriptor. */ void *phy_desc; /** GPIO 0 descriptor. */ struct gpio_desc *gpio0; /** GPIO 1 descriptor. */ struct gpio_desc *gpio1; }; ? /** * @struct adpd188_init_param * @brief Driver initialization structure. */ struct adpd188_init_param { /** Communication physical type. */ enum adpd188_phy_opt phy_opt; /** Communication physical initialization structure. */ union adpd188_phy_init phy_init; /** GPIO 0 initialization structure. */ struct gpio_init_param gpio0_init; /** GPIO 0 initialization structure. */ struct gpio_init_param gpio1_init; }; |
Initialization example
This is an initialization example. After doing this the user must put the device in GO mode and read data as described in the datasheet.
#include |
Downloads
- 利用ADPD188BI光學煙霧和氣霧劑檢測模塊來進行煙霧測試
- 利用ADPD188BI光學煙霧和氣霧劑檢測模塊進行煙霧測試說明
- AD5449-微控制器無操作系統驅動程序
- AD7291-微控制器無操作系統驅動程序
- AD5790-微控制器無操作系統驅動程序
- AD5162-微控制器無操作系統驅動程序
- AD7298-微控制器無操作系統驅動程序
- AD7780-適用于單片機平臺的無操作系統驅動程序
- AD5252-微控制器無操作系統驅動程序
- UG-1274:ADPD188BI評估板用戶指南
- AD7799-微控制器無操作系統驅動程序
- AN-2033:校準ADPD188BI光學煙霧和氣溶膠探測模塊
- AD7887-微控制器無操作系統驅動程序
- AD7734-微控制器無操作系統驅動程序
- ADPD188BI:用于煙霧檢測數據手冊的集成光學模塊(修訂版0) 0次下載
- 怎么編寫Framebuffer驅動程序 590次閱讀
- 深度解析全球操作系統格局 1271次閱讀
- 校準ADPD188BI光學煙霧和氣溶膠檢測模塊 2689次閱讀
- 了解和使用無操作系統和平臺驅動程序 1295次閱讀
- 基于ADPD188BI集成光學模塊系統 1630次閱讀
- 嵌入式Linux內核的驅動程序開發是怎樣的 1524次閱讀
- 煙霧報警系統2.0——ADPD188BI的工作原理 1.2w次閱讀
- 驅動的概念和分類及安全性 4150次閱讀
- 淺談電腦驅動程序的工作原理 詳解電腦驅動程序意義 3w次閱讀
- 基于嵌入式Linux內核的系統設備驅動程序開發設計 1209次閱讀
- 基于Linux2.6.30開發DS18B20的驅動程序的類型和文件操作接口函數詳解 1500次閱讀
- 8255A驅動程序 3434次閱讀
- 8155驅動程序 3284次閱讀
- Xilinx設備的驅動程序 8200次閱讀
- PCI驅動程序開發實例 6831次閱讀
下載排行
本周
- 1AN-1267: 使用ADSP-CM408F ADC控制器的電機控制反饋采樣時序
- 1.41MB | 3次下載 | 免費
- 2AN158 GD32VW553 Wi-Fi開發指南
- 1.51MB | 2次下載 | 免費
- 3AN148 GD32VW553射頻硬件開發指南
- 2.07MB | 1次下載 | 免費
- 4AN-1154: 采用恒定負滲漏電流優化ADF4157和ADF4158 PLL的相位噪聲和雜散性能
- 199.28KB | 次下載 | 免費
- 5AN-960: RS-485/RS-422電路實施指南
- 380.8KB | 次下載 | 免費
- 6EE-249:使用VisualDSP在ADSP-218x DSP上實現軟件疊加
- 60.02KB | 次下載 | 免費
- 7AN-1111: 使用ADuCM360/ADuCM361時的降低功耗選項
- 306.09KB | 次下載 | 免費
- 8AN-904: ADuC7028評估板參考指南
- 815.82KB | 次下載 | 免費
本月
- 1ADI高性能電源管理解決方案
- 2.43 MB | 450次下載 | 免費
- 2免費開源CC3D飛控資料(電路圖&PCB源文件、BOM、
- 5.67 MB | 138次下載 | 1 積分
- 3基于STM32單片機智能手環心率計步器體溫顯示設計
- 0.10 MB | 130次下載 | 免費
- 4使用單片機實現七人表決器的程序和仿真資料免費下載
- 2.96 MB | 44次下載 | 免費
- 5美的電磁爐維修手冊大全
- 1.56 MB | 24次下載 | 5 積分
- 6如何正確測試電源的紋波
- 0.36 MB | 18次下載 | 免費
- 7感應筆電路圖
- 0.06 MB | 10次下載 | 免費
- 8萬用表UT58A原理圖
- 0.09 MB | 9次下載 | 5 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935121次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73810次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論