embedded systems programming
play

Embedded Systems Programming Linux GPIO & I2C Drivers (Module - PowerPoint PPT Presentation

Embedded Systems Programming Linux GPIO & I2C Drivers (Module 13) Yann-Hang Lee Arizona State University yhlee@asu.edu (480) 727-7507 Summer 2014 Real-time Systems Lab, Computer Science and Engineering, ASU Linux GPIO Driver A GPIO


  1. Embedded Systems Programming Linux GPIO & I2C Drivers (Module 13) Yann-Hang Lee Arizona State University yhlee@asu.edu (480) 727-7507 Summer 2014 Real-time Systems Lab, Computer Science and Engineering, ASU

  2. Linux GPIO Driver  A GPIO (General Purpose Input/Output) pin can be configured, set up its direction, and value if it is an output pin  A SoC chip may have several GPIO components  Multiple “gpio chips”  A global number in the integrated GPIO namespace, i.e., 0, 1, 2,…,n  sysfs interface to user space GPIO framework (gpiolib.c) Quark GIP Quark legacy CY8C9540A controller GPIO GPIO[7:0] GPIO_SUS[5:0] 40 GPIO pins in 6 ports GPIO[9:8] 1 Real-time Systems Lab, Computer Science and Engineering, ASU

  3. GPIO Chip Driver  A driver for each GPIO controller to provide  methods to establish GPIO direction and to access GPIO values  method to return the IRQ number associated to a given GPIO  flag saying whether calls to its methods may sleep  optional base number  In intel_qrk_gip_gpio.c /* The base GPIO number under GPIOLIB framework */ #define INTEL_QRK_GIP_GPIO_BASE 8 /* The default number of South-Cluster GPIO on Quark. */ #define INTEL_QRK_GIP_NGPIO 8  In include/linux/gpio/driver.h, “gpio_chip” is defined, including  base: identifies the first GPIO number handled by this chip.  ngpio: the number of GPIOs handled by this controller; the last GPIO handled is (base + ngpio - 1). 2 Real-time Systems Lab, Computer Science and Engineering, ASU

  4. GPIO Driver Operation  GPIO chip driver request to add “gpio_chip” to the platform gc->base = pdata->gpio_base; gc->ngpio = NGPIO; ret = gpiochip_add(&dev->gpio_chip);  gpiolib.c exports methods to work on GPIO pins  from GPIO # to find chip and to invoke teh corresponding methods provided by the chip gpio_request_one(LED1, GPIOF_OUT_INIT_LOW, "led1"); gpio_desc desc1 = gpio_to_desc(LED1); gpio_set_value(desc1, data);  sysfs gpio interfaces, such as gpiod_export, gpio_unexport, gpiod_set_value, gpio_direction_input 3 Real-time Systems Lab, Computer Science and Engineering, ASU

  5. I2C Drivers in Linux  A driver for I2C bus  adapter and algorithm drivers  manages I2C bus transactions  Drivers for I2C devices  A client has the device’s I2C bus address and a pointer to a driver which is attached with an adapter  When a user program issues a file operation that needs an I2C transaction  i2C_transfer (i2C-core.c) to invoke adap_algo_master_xfer  command or data is in an msg array  the adapter issues reads/writes to hardware I/O addresses. (https://i2c.wiki.kernel.org/index.php/Driver_Architecture) 4 Real-time Systems Lab, Computer Science and Engineering, ASU

  6. I2C and SMBus  In general, a system can have multiple I2C Processor buses via different adapters and many I2C devices  2-wire synchronous serial buses ICH8 PCI bus  Master and slave, addressable SMBus  I2C bus and SMBus PCI to I2c Adapter  compatible with each other. EEPROM  Differences I2C EEPROM  Timeout (in SMBus, reset interfaces when sensor clock is low forlonger than 35ms))  Maximum clock speed: 100MHz(Smbus) but I2C bus has both 400kHz and 3.4MHz versions.  Logic level: 1: 3V in I2C and 2.1V in SMBus  General call and alert response. 5 Real-time Systems Lab, Computer Science and Engineering, ASU

  7. Example of Accessing I2C/SMBus Devices i2c_smbus_xfer(adapter, addr, …., data) user device I2C I2C I2C I2C program driver core algorithm adapter device read(……) I2C bus signals omap_i2c_xfer(adapter, msg[ ], num) user space kernel space adapter->algo->i2c_transfer(adapter, msg, num); // for each i2c device struct i2c_driver * driver; struct i2c_client { struct device dev; unsigned short flags; int irq; unsigned short addr; struct list_head list; char name[I2C_NAME_SIZE]; struct completion released; struct i2c_adapter * adapter; }; 6 Real-time Systems Lab, Computer Science and Engineering, ASU

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend