MontaVista Linux SPI Driver
From Texas Instruments Embedded Processors Wiki
Translate this page to
Contents |
Overview
- Serial interface
- Synchronous
- Master-slave configuration
- Data Exchange - DMA/PIO
SPI H/W Architecture
SPI Driver Architecture
OMAP-L137 EVM does not contain a SPI based audio codec. The reference to 'SPI Codec' above are meant to serve as an example.
Testing SPI driver
- Use the MTD interface provided for SPI flash
dd if=/dev/mtd0 of=test.img bs=16k count=1 md5sum test.img flash_eraseall /dev/mtd1 cp test.img /dev/mtd1 dd if=/dev/mtd1 of=test.img bs=16k count=1 md5sum test.img
- /dev/spi interface not supported in MontaVista Pro 5.0 kernel
Porting for custom hardware
- drivers/spi/davinci_spi_master.c implements core SPI master functionality.
- This file is generic, should not need to modify this.
- board specific customizations in arch/arm/mach-da8xx/spi.c
- Modify device array da8xx_spi_board_info0 to change information on slaves connected to SPI0. Use da8xx_spi_board_info1 for SPI1. When adding new slave devices, ensure that num_chipselect member of the platform data for the corresponding SPI master (da8xx_spi_pdata0 or da8xx_spi_pdata0). Note: The SPI master is only capable of interfacing with one slave in DMA mode. In PIO mode, it can interface to any number of slaves.
- Each member is of type spi_board_info defined in include/linux/spi. Each element of the device array represents one slave device.
- modalias used to match slave device to slave driver. Note that this is not the SPI master driver. Each slave needs to have its own driver. Example, SPI flash will have a MTD driver, SPI codec will have an ALSA driver etc.
- platform_data used by slave driver
- controller_data used by SPI master driver for slave specific information (of type davinci_spi_config_t). This is used to take care of specific requirements of communicating with a given slave.
- bus_num 0 for SPI0, 1 for SPI1
- chip_select chip select number for this SPI slave
- max_speed_hz SPI bus speed.
- Each member is of type spi_board_info defined in include/linux/spi. Each element of the device array represents one slave device.
- Some of SPI chip selects can be driven by GPIO. Define chip_sel array in platform data for SPI master. da8xx_spi_pdata0 for SPI0 and da8xx_spi_pdata1 for SPI1.
- If chip_sel[n] = DAVINCI_SPI_INTERN_CS, use IP chip select. If equal to GPIO num, use specified GPIO for chip select.
- GPIO num = (16 * bank number) + (gpio num)
- Ensure all pins required for SPI operation are muxed correctly (especially if using GPIO for CS)
- use da8xx_evm_pinmux_override in arch/arm/mach-da8xx/board-evm.c to specify pin requirements.
- See evm_spi1_pins as an example.
Leave a Comment


