Linux sensor device driver programming with …...• Android provides “Sensor API” as well as...

24
© ROHM Semiconductor GmbH 2019 Linux sensor device driver programming with 96Boards 3 rd of April, 2019 Koki Okada Director, Finland Software Development Center ROHM Semiconductor GmbH

Transcript of Linux sensor device driver programming with …...• Android provides “Sensor API” as well as...

Page 1: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

© ROHM Semiconductor GmbH2019

Linux sensor device driver programming with 96Boards3rd of April, 2019Koki OkadaDirector, Finland Software Development CenterROHM Semiconductor GmbH

Page 2: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 1© ROHM Semiconductor GmbH2019

WHO_AM_I

Name : Koki OkadaNationality : JapaneseLocation : FinlandCompany : ROHM SemiconductorJob : Software team lead

[email protected]

https://www.linkedin.com/in/koki-okada-5588939a

Page 3: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 2© ROHM Semiconductor GmbH2019

Preview

• 5 min – ROHM Semiconductor, the company introduction• 5 min – Basic for Sensor UPM driver• 5 min – Basic for Sensor Input driver and Android HAL driver• 5 min – Basic for Sensor IIO driver• 5 min – Giveaway – Rohm’s sensor Mezzanine board

Goal of this session To share the overview of several options to implement sensors on 96Boards.

Page 4: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 3© ROHM Semiconductor GmbH2019

ROHM Semiconductor, the company introduction

Page 5: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 4© ROHM Semiconductor GmbH2019

ROHM Semiconductor – The global device supplier

IC

DiscreteSemiconductor

Passive / Module

SiC(Silicon carbide) Devices IPMsTransistors(Bipolar, MOSFET, IGBT)DiodesLEDs / LED Displays Laser Diodes

ResistorsTantalum Capacitors Optical Sensors IrDA / Remote Control Receiver ModulesPower ModulesWireless Communication Modules

Memory Amplifiers & Linear Power ManagementClocks & Timers Switch & Multiplexer & Logic Data Converter

Sensors & MEMS Display Drivers Motor / Actuator DriversInterface / Communication Audio & Video

Contact Image Sensor HeadsPrintheads

Page 6: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 5© ROHM Semiconductor GmbH2019

JPN Accounts

Organization of ROHM Semiconductor GmbH

PresidentChristian André

Logistics & AdministrationSenior DirectorB. Brzenk

European Design CenterTechnical DirectorM. Davis

Product Marketing DirectorG. Richard

Senior Director Toshimitsu Suzuki

Sales

Quality Dept.Group Manager D. Peters

Group Manager T. Sato

Sales DirectorH. Metzger

DirectorA. Bauknecht

Sales DirectorO. Edelmann

PrintheadsAutomotive Industrial Distribution

Finland Software Development CenterDirectorK.Okada

Business Development DirectorM. Shirai

Page 7: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 6© ROHM Semiconductor GmbH2019

Finland Software Development Center

Windows GUI Apps Android GUI Apps Python based CLI

applications Windows console

applications Linux console

applications

Python based prototyping

Matlab based modelling Big data and Machine

learning based development

System-C based ASIC development

- Software R&D team for all ROHM products- 17 experts- Supporting customers globally

Located in Oulu, Finland, ”the Nordic Silicon Valley”.

GUI/CLI Apps Evaluation board design

and manufacturing 3D model mechanics

design and manufacturing

System evaluation

HardwareAlgorithm MCU/DSP firmware Real Time OS drivers Linux kernel drivers Android HAL drivers Windows UMDF drivers Sensor Hub drivers ARM mbed drivers Arduino libraries Logo certifications

Drivers

Open Source Distribution site in GitHubhttps://github.com/RohmSemiconductor

Page 8: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 7© ROHM Semiconductor GmbH2019

Software related devices in ROHM

Sensors

• Accelerometer• Gyroscope• Magnet sensor• Barometer• Heart rate sensor• Sonar sensor• Light sensor• RGB sensor• Proximity sensor• Hall sensor• Temperature

sensor

Actuators

• Optical image stabilizer

• Lens control driver• Auto focus driver• LED driver• Piezo inkjet driver

Powers

• Power Management IC for Intel Core/Atom

• Power Management IC for NXP iMX

• Power Management IC for Renesas R-Car

• Battery charger• Coulomb counter • Wireless power

charger

Interfaces

• Display timing controller

• USB2.0/3.0• NFC• Wi-Fi• Bluetooth 4/5• Sub-GHz radio• Cellular IoT

Page 9: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 8© ROHM Semiconductor GmbH2019

Basic for Sensor UPM driver

Page 10: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 9© ROHM Semiconductor GmbH2019

UPM Driver - Overview

• UPM stands for ”Useful Packages & Modules.” It provides drivers for multiple sensors and actuators. https://github.com/intel-iot-devkit/upm

• UPM runs in user space and it access hardware via APIs of MRAA, https://github.com/intel-iot-devkit/mraa

• UPM and MRAA are originally developed by Intel, but it also supports a wide range of hardware such as ARM(96Boards), MIPS.

• MRAA is a C based Linux library for low speed I/O communication with bindings for C++, Python, Node.js & Java.

Page 11: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 10© ROHM Semiconductor GmbH2019

UPM/MRAA in system block diagram

hw

UPM

MRAA

SPI

kernel

user

appC/C++ python java node.js

GPIO

Sensor UPM driver

SPI subsys GPIO subsys

I2C

I2C subsys

Physical sensor 96board

Hardware Software

I2C/SPI/GPIO

Page 12: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 11© ROHM Semiconductor GmbH2019

How to implement UPM/MRAA on 96Boards

• ”Programing I2C devices with libmraa and libupm”https://www.96boards.org/blog/programing-i2c-devices-libmraa-libupm/

• “Our path to libmraa on 96Boards - Part 1“ - (from part-1 to part-7)https://www.96boards.org/blog/path-libmraa-96boards-part-1/

• Rohm UPM sensor drivers in GitHub.https://github.com/RohmSemiconductor/UPM-sensor-drivers

Page 13: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 12© ROHM Semiconductor GmbH2019

Basic for Sensor Input driver and

Android HAL driver

Page 14: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 13© ROHM Semiconductor GmbH2019

Sensor Input driver and Android HAL driver - Overview

• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel are not provided by Android, so these two parts are needed in order to make sensors work.

• Input Subsystem in Linux kernel is a generic Linux framework for all input devices like keyboard, mouse, touchscreen, etc. It has been used for sensors as well. https://www.kernel.org/doc/html/v4.12/input/index.html

• Sensors became common devices in Linux based system, especially in smartphone, before Linux kernel prepare established APIs for sensors. It might be a reason why many sensor providers have been using Input Subsystem for sensors in Android.

Page 15: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 14© ROHM Semiconductor GmbH2019

Sensor Input driver in Android system

hw

Sensors HAL

Input

kernel

HAL

Framework

custom

Physical sensor

Sensor Input driver

Input subsys custom

IIO

IIO subsys

I2C/SPI/GPIO

96board

Hardware Software

Sensor API

I2C/SPI/GPIO

Page 16: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 15© ROHM Semiconductor GmbH2019

Sensor HAL driver in Android system

hw

Sensors HAL

Input

kernel

HAL

Framework

custom

Physical sensor

Sensor Input driver

Input subsys custom

IIO

IIO subsys

I2C/SPI/GPIO

96board

Hardware Software

Sensor API

I2C/SPI/GPIO

Page 17: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 16© ROHM Semiconductor GmbH2019

• Sensor porting guide for 96boards DB410c by Qualcomm, https://developer.qualcomm.com/qfile/28820/lm80-p0436-9_sensors_porting_guide.pdf

• Rohm’s Sensor Input drivers in GitHub https://github.com/RohmSemiconductor/Linux-Kernel-Input-Drivers

How to implement Sensor Input driver and Android Sensor HAL driver on 96Boards

Page 18: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 17© ROHM Semiconductor GmbH2019

Basic for Sensor IIO driver

Page 19: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 18© ROHM Semiconductor GmbH2019

IIO, Industry Input and Output subsystem - Overview

• The IIO is intended to provide support for ADCs, DACs, and Sensors such as Accelerometers, Gyroscopes, Pressure sensors, Magnetometers, Colorsensors, Light sensors, Proximity sensors, and so on.

• Hwmon subsystem and Input subsystem have been used for sensors, but Hwmon is very much directed at low sample rate sensors used in applications such as fan speed control and temperature measurement, and Input is originally focused on human interaction input devices. The overall aim of IIO seemed to be to fill the gap between the somewhat similar hwmon and input subsystems.

Page 20: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 19© ROHM Semiconductor GmbH2019

Sensor IIO driver in Android system

hw

Sensors HAL

Input

kernel

HAL

Framework

custom

Physical sensor

Input subsys custom

IIO

IIO subsys

Sensor IIO driver

I2C/SPI/GPIO

96board

Hardware Software

HAL interface

I2C/SPI/GPIO

Page 21: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 20© ROHM Semiconductor GmbH2019

• Interfacing Grove Digital Light I2C Sensor Application Note, https://developer.qualcomm.com/qfile/29466/lm80-p0436-23_interface_i2c_light_sensor_appnote.pdf

• IIO driver for Rohm’s optical proximity sensor RPR-0521RS, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/iio/light/rpr0521.c?id=98c2f10d2366ec7128c254c775d4e6969a705ecd

How to implement IIO driver and Android Sensor HAL driver on 96Boards

Page 22: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 21© ROHM Semiconductor GmbH2019

Give away : Rohm Sensor mezzanine• 96Boards compatible

• Support Rohm 5 pin sensor boards x 2 slots

• Support Kionix 14 pin sensor boards x 2 slots

• Support Grove sensors x 2 slots

• Not in sales, just for Linaro Connect 2019

Page 23: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

P. 22© ROHM Semiconductor GmbH2019

Rohm 5 pin sensor boards• Heart rate sensor BH1792GLC

• https://www.rohm.com/sensor-shield-support/heart-rate-sensor2

• Accelerometer KX224-1053• https://www.rohm.com/sensor-shield-support/accelerometer

• Pressure sensor BM1383AGLV• https://www.rohm.com/sensor-shield-support/pressure-sensor

• Magnetic sensor BM1422AGMV• https://www.rohm.com/sensor-shield-support/magnetic-sensor

• ALS and Prox RPR-0521RS• https://www.rohm.com/sensor-shield-support/ps-als-sensor

• Color sensor BH1749NUC• https://www.rohm.com/sensor-shield-support/color-sensor

• Hall sensor BD7411G• https://www.rohm.com/sensor-shield-support/hall-sensor

• Temperature sensor BD1020HFV• https://www.rohm.com/sensor-shield-support/temperature-sensor

Page 24: Linux sensor device driver programming with …...• Android provides “Sensor API” as well as “SensorManager”. However, the “Sensor HAL” and sensor drivers in Linux kernel

© 2019 ROHM Semiconductor GmbH

Please see the team introduction video on Youtube.https://www.youtube.com/watch?v=MQqmPvGkGRQ

Thank you so much!