系统spi实现
x86 <-pci-> pxe8311 <-local bus-> cpld <-spi-> spi-flash <-spi-> cpld <-local bus-> fpga
1. spi包含spi control device和spi device
control device是spi总线控制器
device是spi设备,被control device控制
系统的spi control device是CPLD设备,挂载在pxe8311下,从pci总线可以配置
spi device是spi flash设备,用于存储fpga image
2. 相关驱动
驱动主要包含三个部分
2.1 pxe8311驱动
用于将cpld寄存器空间映射到pci空间
2.2 cpld驱动
用于控制spi controller
2.3 spi flash驱动
用于访问flash设备
3. 驱动实现
3.1 pxe8311
标准的pci设备驱动,将cpld寄存器映射到pci地址空间即可
3.2 cpld
cpld采用了altera的spi controller 软核实现,基本可以采用drivers/spi/spi-altera.c
3.3 spi flash
spi flash选用类m25p80设备,基本可以采用drivers/mtd/devices/m25p80.c
3.4 整合
pxe8311驱动扫描到cpld后需要向系统添加spi control 和spi flash两个平台设备,并设定相关参数
spi-control的寄存区地址区域,大小,总线号等等
spi-flash的所属总线号等等
3.5 代码举例
3.5.1向系统添加spi control device
用platform_device_register(&at572d940hf_spi0_device);
信息包含:
static struct nuc900_spi_info nuc900_spiflash_data = {
};
static struct resource nuc900_spi_resource[] = {
};
static struct platform_device nuc900_device_spi = {
};
3.5.2向系统添加spi flash device
用spi_register_board_info(nuc900_spi_board_info,ARRAY_SIZE(nuc900_spi_board_info));
信息包含:
static struct mtd_partition nuc900_spi_flash_partitions[] = {
};
static struct flash_platform_data nuc900_spi_flash_data = {
};
static struct spi_board_info nuc900_spi_board_info[] __initdata = {
};