SlideShare ist ein Scribd-Unternehmen logo
1 von 20
© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Serial Peripheral Interface (SPI) Drivers
2© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What to Expect?
SPI Prologue
SPI Framework
SPI Framework Components
SPI Client Driver
3© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
SPI Prologue
Suitable for small slow devices
SPI is a 4-wire protocol unlike I2
C
Apart from Serial Clock, Data Lines are 2
And an additional Chip Select
4© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
SPI Protocol
Memory Memory
0 1 2 3 5 6 7 0 1 2 3 5 6 7
SCLK
MISO
MOSI
CS
Master Slave
5© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
SPI Character Driver Framework
User Space
/dev/spi0
cat, echo
my_open() my_read() my_write()
Char Driver
Low Level
SPI Driver
spi_rw() test.c, s1.c
App
open(), read(), write()
6© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
AM335X Registers
Module Control Register
For configuring the SPI interface
Single / Multi channel, Master / Slave, Chip select pins
Channel Configuration Register
Used to configure the SPI channel (0-3)
Clock Divider, FIFO for Rx / TX, Pins for TX / RX, DMA RX / TX, SPI Mode (Full
Duplex, Half Duplex), Word Length, SPI Mode
Channel Status Register
Status information for channel (0–3)
RX / TX FIFO Full / Empty
Channel Control Register
Enabling / Disabling the channel
7© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
AM335X SPI APIs
omap2_mcspi_set_enable(struct omap2_mcspi *, int enable)
Enable / Disable the channel
int mcspi_wait_for_reg_bit(void __iomem *reg, unsigned
long bit)
Wait for register bit to set
__raw_writel(ch, tx_reg)
For writing into tx_reg
char ch = __raw_readl(rx_reg)
For reading rx_reg
8© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
SPI Framework
spi.c – Implements the SPI core layer
include/linux/spi/spi.h
spidev.c – Provides the char interface for spi
devices
include/linux/spi/spidev.h
spi-omap2-mcspi – Controller driver for omap
based chips
9© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
SPI Framework
SPI Core
driver/spi/spi.c
mcp320x.c
drivers/iio/adc
SPI based ADC
driver
SPI Client Driver
m25p80.c
drivers/mtd/
SPI based Flash
driver
spi-omap2-mcspi.c
omap SPI Adapter
Driver
atmel-spi.c
Atmel SPI Adapter
Driver
spi-imx.c
IMX SPI Adapter
Driver
spidev.c
drivers/spi
Char driver for
SPI
Industrial IO
Framework
rtc-ds1505.c
drivers/rtc
SPI based RTC
driver
MTD
Framework
RTC
Framework
Char Driver
Framework
spi-altera.c
Altera SPI Adapter
Driver
10© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Framework Components
SPI Master
Bus controller which handles the low level h/w transactions
struct spi_master
dev – device interface to this driver
list – linked with global spi_master list
Board specific bus number
min_speed_hz
max_speed_hz
setup – updates the device mode and clock
transfer – adds a message to the controller’s transfer queue
cleanup – frees up controller specific state
transfer_one_message – the subsystem calls the driver
spi_register_master(spi_master)
11© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Framework Components ...
SPI Device
Represents the SPI Slave in the Kernel
struct spi_device
dev – device interface to this driver
master – SPI controller used with the device
max_speed_hz – Maximum clock rate to be used with this device
mode – Defines how the data is clocked out and in
bits_per_word
controller_state – Controller’s runtime state
controller_data – Board specific definitions for controller such as FIFO
modalias – name of the driver to use with this device
cs_gpio – gpio signal used for chip select line
12© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
SPI Client Driver
Host side protocol driver
struct spi_driver
probe – Binds the driver to SPI device
remove – unbinds the driver from the SPI device
id_table – List of SPI devices supported by this driver
driver – name of this driver. This will be used to bind
with SPI slaves
13© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
SPI Client Driver ...
Register probe() & remove() with SPI Core
Optionally, register suspend() & resume()
Header: <linux/spi/spi.h>
API
int spi_register_driver(struct spi_driver *);
void spi_unregister_driver(struct spi_driver *);
module_spi_driver()
Device Access APIs
spi_sync(struct spi_device *, struct spi_message *);
spi_async(struct spi_device *, struct spi_message *);
14© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
SPI Device Access
/* struct spi_device *spi – obtained through probe */
struct spi_transfer xfer;
struct spi_message sm;
u8 *cmd_buf;
int len;

 /* Ready the cmd_buf & its len */ ...
spi_message_init(&sm);
xfer.tx_buf = cmd_buf;
xfer.len = len;
spi_message_add_tail(&xfer, &sm);
spi_sync(spi, &sm); /* Blocking transfer request */
spi_transfer_del(&xfer);
15© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
SPI Master Registration Flow
16© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
spi_sync flow
17© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
DTB changes for MCP3008
mcp3x0x@0 {
compatible = "mcp3208";
reg = <0>;
spi-max-frequency = <1000000>;
};
18© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
SPI Driver Example
Driver: ADC (drivers/iio/adc/mcp320x.c)
Path: <kernel_source>/drivers/spi
Browse & Discuss
19© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What all have we learnt?
SPI Prologue
SPI Framework
SPI Framework Components
SPI Client Driver
20© 2010-19 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Any Queries?

Weitere Àhnliche Inhalte

Was ist angesagt?

Kernel Debugging & Profiling
Kernel Debugging & ProfilingKernel Debugging & Profiling
Kernel Debugging & Profiling
Anil Kumar Pugalia
 
Session 6 sv_randomization
Session 6 sv_randomizationSession 6 sv_randomization
Session 6 sv_randomization
Nirav Desai
 
Embedded_Linux_Booting
Embedded_Linux_BootingEmbedded_Linux_Booting
Embedded_Linux_Booting
Rashila Rr
 

Was ist angesagt? (20)

Kernel Debugging & Profiling
Kernel Debugging & ProfilingKernel Debugging & Profiling
Kernel Debugging & Profiling
 
Block Drivers
Block DriversBlock Drivers
Block Drivers
 
Linux Porting
Linux PortingLinux Porting
Linux Porting
 
BeagleBoard-xM Booting Process
BeagleBoard-xM Booting ProcessBeagleBoard-xM Booting Process
BeagleBoard-xM Booting Process
 
Continguous Memory Allocator in the Linux Kernel
Continguous Memory Allocator in the Linux KernelContinguous Memory Allocator in the Linux Kernel
Continguous Memory Allocator in the Linux Kernel
 
Board Bringup
Board BringupBoard Bringup
Board Bringup
 
Linux : PSCI
Linux : PSCILinux : PSCI
Linux : PSCI
 
Linux device drivers
Linux device drivers Linux device drivers
Linux device drivers
 
Network Drivers
Network DriversNetwork Drivers
Network Drivers
 
Linux PCI device driver
Linux PCI device driverLinux PCI device driver
Linux PCI device driver
 
Bootloaders
BootloadersBootloaders
Bootloaders
 
USB Drivers
USB DriversUSB Drivers
USB Drivers
 
BeagleBone Black Bootloaders
BeagleBone Black BootloadersBeagleBone Black Bootloaders
BeagleBone Black Bootloaders
 
Stoe 12 p
Stoe 12 pStoe 12 p
Stoe 12 p
 
Session 6 sv_randomization
Session 6 sv_randomizationSession 6 sv_randomization
Session 6 sv_randomization
 
Processes
ProcessesProcesses
Processes
 
Hands-on ethernet driver
Hands-on ethernet driverHands-on ethernet driver
Hands-on ethernet driver
 
Embedded_Linux_Booting
Embedded_Linux_BootingEmbedded_Linux_Booting
Embedded_Linux_Booting
 
Introduction to Linux
Introduction to LinuxIntroduction to Linux
Introduction to Linux
 
Spi drivers
Spi driversSpi drivers
Spi drivers
 

Ähnlich wie SPI Drivers

5.5.1.2 packet tracer configure ios intrusion prevention system (ips) using...
5.5.1.2 packet tracer   configure ios intrusion prevention system (ips) using...5.5.1.2 packet tracer   configure ios intrusion prevention system (ips) using...
5.5.1.2 packet tracer configure ios intrusion prevention system (ips) using...
Salem Trabelsi
 

Ähnlich wie SPI Drivers (20)

Đ’ĐœŃƒŃ‚Ń€Đ”ĐœĐœŃŃ архОтДĐșтура IOS-XE: срДЎстĐČĐ° Ń‚Ń€Đ°Đ±Đ»ŃˆŃƒŃ‚ĐžĐœĐłĐ° прДЎачО трафоĐșĐ° ĐœĐ° ASR1k...
Đ’ĐœŃƒŃ‚Ń€Đ”ĐœĐœŃŃ архОтДĐșтура IOS-XE: срДЎстĐČĐ° Ń‚Ń€Đ°Đ±Đ»ŃˆŃƒŃ‚ĐžĐœĐłĐ° прДЎачО трафоĐșĐ° ĐœĐ° ASR1k...Đ’ĐœŃƒŃ‚Ń€Đ”ĐœĐœŃŃ архОтДĐșтура IOS-XE: срДЎстĐČĐ° Ń‚Ń€Đ°Đ±Đ»ŃˆŃƒŃ‚ĐžĐœĐłĐ° прДЎачО трафоĐșĐ° ĐœĐ° ASR1k...
Đ’ĐœŃƒŃ‚Ń€Đ”ĐœĐœŃŃ архОтДĐșтура IOS-XE: срДЎстĐČĐ° Ń‚Ń€Đ°Đ±Đ»ŃˆŃƒŃ‚ĐžĐœĐłĐ° прДЎачО трафоĐșĐ° ĐœĐ° ASR1k...
 
Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...
Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...
Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...
 
Embedded I/O Management
Embedded I/O ManagementEmbedded I/O Management
Embedded I/O Management
 
Advanced Topics in IP Multicast Deployment
Advanced Topics in IP Multicast DeploymentAdvanced Topics in IP Multicast Deployment
Advanced Topics in IP Multicast Deployment
 
Ae01 system overview
Ae01 system overviewAe01 system overview
Ae01 system overview
 
PLNOG 13: P. Kupisiewicz, O. Pelerin: Make IOS-XE Troubleshooting Easy – Pack...
PLNOG 13: P. Kupisiewicz, O. Pelerin: Make IOS-XE Troubleshooting Easy – Pack...PLNOG 13: P. Kupisiewicz, O. Pelerin: Make IOS-XE Troubleshooting Easy – Pack...
PLNOG 13: P. Kupisiewicz, O. Pelerin: Make IOS-XE Troubleshooting Easy – Pack...
 
BeagleBone Black Bootloaders
BeagleBone Black BootloadersBeagleBone Black Bootloaders
BeagleBone Black Bootloaders
 
ĐžŃĐŸĐ±Đ”ĐœĐœĐŸŃŃ‚Đž архОтДĐșтуры Đž Ń‚Ń€Đ°Đ±Đ»ŃˆŃƒŃ‚ĐžĐœĐłĐ° ĐŒĐ°Ń€ŃˆŃ€ŃƒŃ‚ĐžĐ·Đ°Ń‚ĐŸŃ€ĐŸĐČ ŃĐ”Ń€ĐžĐž ASR1000
ĐžŃĐŸĐ±Đ”ĐœĐœĐŸŃŃ‚Đž архОтДĐșтуры Đž Ń‚Ń€Đ°Đ±Đ»ŃˆŃƒŃ‚ĐžĐœĐłĐ° ĐŒĐ°Ń€ŃˆŃ€ŃƒŃ‚ĐžĐ·Đ°Ń‚ĐŸŃ€ĐŸĐČ ŃĐ”Ń€ĐžĐž ASR1000ĐžŃĐŸĐ±Đ”ĐœĐœĐŸŃŃ‚Đž архОтДĐșтуры Đž Ń‚Ń€Đ°Đ±Đ»ŃˆŃƒŃ‚ĐžĐœĐłĐ° ĐŒĐ°Ń€ŃˆŃ€ŃƒŃ‚ĐžĐ·Đ°Ń‚ĐŸŃ€ĐŸĐČ ŃĐ”Ń€ĐžĐž ASR1000
ĐžŃĐŸĐ±Đ”ĐœĐœĐŸŃŃ‚Đž архОтДĐșтуры Đž Ń‚Ń€Đ°Đ±Đ»ŃˆŃƒŃ‚ĐžĐœĐłĐ° ĐŒĐ°Ń€ŃˆŃ€ŃƒŃ‚ĐžĐ·Đ°Ń‚ĐŸŃ€ĐŸĐČ ŃĐ”Ń€ĐžĐž ASR1000
 
1 familia simatic s7
1 familia simatic s71 familia simatic s7
1 familia simatic s7
 
Experiences with Oracle SPARC S7-2 Server
Experiences with Oracle SPARC S7-2 ServerExperiences with Oracle SPARC S7-2 Server
Experiences with Oracle SPARC S7-2 Server
 
CCNA CHAPTER 5 BY jetarvind kumar madhukar
CCNA CHAPTER 5 BY jetarvind kumar madhukarCCNA CHAPTER 5 BY jetarvind kumar madhukar
CCNA CHAPTER 5 BY jetarvind kumar madhukar
 
Serial Drivers
Serial DriversSerial Drivers
Serial Drivers
 
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio [Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
 
OpenChain AutomotiveWG(OSS license tools()
OpenChain AutomotiveWG(OSS license tools()OpenChain AutomotiveWG(OSS license tools()
OpenChain AutomotiveWG(OSS license tools()
 
OpenCV acceleration battle:OpenCL on Firefly-RK3288(MALI-T764) vs. FPGA on Ze...
OpenCV acceleration battle:OpenCL on Firefly-RK3288(MALI-T764) vs. FPGA on Ze...OpenCV acceleration battle:OpenCL on Firefly-RK3288(MALI-T764) vs. FPGA on Ze...
OpenCV acceleration battle:OpenCL on Firefly-RK3288(MALI-T764) vs. FPGA on Ze...
 
CCNA 2 Routing and Switching v5.0 Chapter 4
CCNA 2 Routing and Switching v5.0 Chapter 4CCNA 2 Routing and Switching v5.0 Chapter 4
CCNA 2 Routing and Switching v5.0 Chapter 4
 
5.5.1.2 packet tracer configure ios intrusion prevention system (ips) using...
5.5.1.2 packet tracer   configure ios intrusion prevention system (ips) using...5.5.1.2 packet tracer   configure ios intrusion prevention system (ips) using...
5.5.1.2 packet tracer configure ios intrusion prevention system (ips) using...
 
Homer - Workshop at Kamailio World 2017
Homer - Workshop at Kamailio World 2017Homer - Workshop at Kamailio World 2017
Homer - Workshop at Kamailio World 2017
 
CCNA (R & S) Module 03 - Routing & Switching Essentials - Chapter 1
CCNA (R & S) Module 03 - Routing & Switching Essentials - Chapter 1CCNA (R & S) Module 03 - Routing & Switching Essentials - Chapter 1
CCNA (R & S) Module 03 - Routing & Switching Essentials - Chapter 1
 
2014/09/02 Cisco UCS HPC @ ANL
2014/09/02 Cisco UCS HPC @ ANL2014/09/02 Cisco UCS HPC @ ANL
2014/09/02 Cisco UCS HPC @ ANL
 

Mehr von SysPlay eLearning Academy for You (13)

Linux Internals Part - 3
Linux Internals Part - 3Linux Internals Part - 3
Linux Internals Part - 3
 
Linux Internals Part - 2
Linux Internals Part - 2Linux Internals Part - 2
Linux Internals Part - 2
 
Linux Internals Part - 1
Linux Internals Part - 1Linux Internals Part - 1
Linux Internals Part - 1
 
Kernel Timing Management
Kernel Timing ManagementKernel Timing Management
Kernel Timing Management
 
Understanding the BBB
Understanding the BBBUnderstanding the BBB
Understanding the BBB
 
POSIX Threads
POSIX ThreadsPOSIX Threads
POSIX Threads
 
Linux DMA Engine
Linux DMA EngineLinux DMA Engine
Linux DMA Engine
 
Cache Management
Cache ManagementCache Management
Cache Management
 
Introduction to BeagleBone Black
Introduction to BeagleBone BlackIntroduction to BeagleBone Black
Introduction to BeagleBone Black
 
Introduction to BeagleBoard-xM
Introduction to BeagleBoard-xMIntroduction to BeagleBoard-xM
Introduction to BeagleBoard-xM
 
BeagleBone Black Booting Process
BeagleBone Black Booting ProcessBeagleBone Black Booting Process
BeagleBone Black Booting Process
 
BeagleBoard-xM Bootloaders
BeagleBoard-xM BootloadersBeagleBoard-xM Bootloaders
BeagleBoard-xM Bootloaders
 
Linux System
Linux SystemLinux System
Linux System
 

KĂŒrzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
Enterprise Knowledge
 

KĂŒrzlich hochgeladen (20)

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 

SPI Drivers

  • 1. © 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Serial Peripheral Interface (SPI) Drivers
  • 2. 2© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What to Expect? SPI Prologue SPI Framework SPI Framework Components SPI Client Driver
  • 3. 3© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. SPI Prologue Suitable for small slow devices SPI is a 4-wire protocol unlike I2 C Apart from Serial Clock, Data Lines are 2 And an additional Chip Select
  • 4. 4© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. SPI Protocol Memory Memory 0 1 2 3 5 6 7 0 1 2 3 5 6 7 SCLK MISO MOSI CS Master Slave
  • 5. 5© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. SPI Character Driver Framework User Space /dev/spi0 cat, echo my_open() my_read() my_write() Char Driver Low Level SPI Driver spi_rw() test.c, s1.c App open(), read(), write()
  • 6. 6© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. AM335X Registers Module Control Register For configuring the SPI interface Single / Multi channel, Master / Slave, Chip select pins Channel Configuration Register Used to configure the SPI channel (0-3) Clock Divider, FIFO for Rx / TX, Pins for TX / RX, DMA RX / TX, SPI Mode (Full Duplex, Half Duplex), Word Length, SPI Mode Channel Status Register Status information for channel (0–3) RX / TX FIFO Full / Empty Channel Control Register Enabling / Disabling the channel
  • 7. 7© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. AM335X SPI APIs omap2_mcspi_set_enable(struct omap2_mcspi *, int enable) Enable / Disable the channel int mcspi_wait_for_reg_bit(void __iomem *reg, unsigned long bit) Wait for register bit to set __raw_writel(ch, tx_reg) For writing into tx_reg char ch = __raw_readl(rx_reg) For reading rx_reg
  • 8. 8© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. SPI Framework spi.c – Implements the SPI core layer include/linux/spi/spi.h spidev.c – Provides the char interface for spi devices include/linux/spi/spidev.h spi-omap2-mcspi – Controller driver for omap based chips
  • 9. 9© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. SPI Framework SPI Core driver/spi/spi.c mcp320x.c drivers/iio/adc SPI based ADC driver SPI Client Driver m25p80.c drivers/mtd/ SPI based Flash driver spi-omap2-mcspi.c omap SPI Adapter Driver atmel-spi.c Atmel SPI Adapter Driver spi-imx.c IMX SPI Adapter Driver spidev.c drivers/spi Char driver for SPI Industrial IO Framework rtc-ds1505.c drivers/rtc SPI based RTC driver MTD Framework RTC Framework Char Driver Framework spi-altera.c Altera SPI Adapter Driver
  • 10. 10© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Framework Components SPI Master Bus controller which handles the low level h/w transactions struct spi_master dev – device interface to this driver list – linked with global spi_master list Board specific bus number min_speed_hz max_speed_hz setup – updates the device mode and clock transfer – adds a message to the controller’s transfer queue cleanup – frees up controller specific state transfer_one_message – the subsystem calls the driver spi_register_master(spi_master)
  • 11. 11© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Framework Components ... SPI Device Represents the SPI Slave in the Kernel struct spi_device dev – device interface to this driver master – SPI controller used with the device max_speed_hz – Maximum clock rate to be used with this device mode – Defines how the data is clocked out and in bits_per_word controller_state – Controller’s runtime state controller_data – Board specific definitions for controller such as FIFO modalias – name of the driver to use with this device cs_gpio – gpio signal used for chip select line
  • 12. 12© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. SPI Client Driver Host side protocol driver struct spi_driver probe – Binds the driver to SPI device remove – unbinds the driver from the SPI device id_table – List of SPI devices supported by this driver driver – name of this driver. This will be used to bind with SPI slaves
  • 13. 13© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. SPI Client Driver ... Register probe() & remove() with SPI Core Optionally, register suspend() & resume() Header: <linux/spi/spi.h> API int spi_register_driver(struct spi_driver *); void spi_unregister_driver(struct spi_driver *); module_spi_driver() Device Access APIs spi_sync(struct spi_device *, struct spi_message *); spi_async(struct spi_device *, struct spi_message *);
  • 14. 14© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. SPI Device Access /* struct spi_device *spi – obtained through probe */ struct spi_transfer xfer; struct spi_message sm; u8 *cmd_buf; int len; 
 /* Ready the cmd_buf & its len */ ... spi_message_init(&sm); xfer.tx_buf = cmd_buf; xfer.len = len; spi_message_add_tail(&xfer, &sm); spi_sync(spi, &sm); /* Blocking transfer request */ spi_transfer_del(&xfer);
  • 15. 15© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. SPI Master Registration Flow
  • 16. 16© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. spi_sync flow
  • 17. 17© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. DTB changes for MCP3008 mcp3x0x@0 { compatible = "mcp3208"; reg = <0>; spi-max-frequency = <1000000>; };
  • 18. 18© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. SPI Driver Example Driver: ADC (drivers/iio/adc/mcp320x.c) Path: <kernel_source>/drivers/spi Browse & Discuss
  • 19. 19© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What all have we learnt? SPI Prologue SPI Framework SPI Framework Components SPI Client Driver
  • 20. 20© 2010-19 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Any Queries?