1、条件:基于XILINX uboot。
2、使用SPI。其实SPI控制器使用,在每个步骤都可以使用,包括在fsbl等都可以。原理就是配置控制器的寄存器。
在FSBL中使用SPI:(1)、初始化SPI控制器0或者1,具体看vavido中硬件。调用
XSpiPs_Config *SpiConfig;XSpiPs Spi0
SpiConfig = XSpiPs_LookupConfig(id);ID 为控制器编号(XPAR_XSPIPS_0_DEVICE_ID)。
XSpiPs_CfgInitialize(&Spi0, SpiConfig, SpiConfig->BaseAddress); 初始化配置
XSpiPs_SetOptions //初始化其他配置
XSpiPs_SetClkPrescaler
XSpiPs_SetSlaveSelect //客户端选择。
通信:
if (up)
spi1_set(XSPIPS_MASTER_OPTION | XSPIPS_FORCE_SSELECT_OPTION);
else
spi1_set(XSPIPS_MASTER_OPTION | XSPIPS_FORCE_SSELECT_OPTION|XSPIPS_CLK_ACTIVE_LOW_OPTION);
XSpiPs_SetSlaveSelect(&Spi0, 1); //从设备选中
XSpiPs_PolledTransfer(&Spi0, data, NULL, length);通信开始。
上述是基于FSBL中的通信,在Uboot中:
(1) static struct spi_slave* spi_inst = NULL;
(2) spi_inst = spi_setup_slave(0, 0,
1000000, SPI_MODE_2); //申请spi从设备
(3) spi_inst->cs = 0; //从设备cs
(4) spi_claim_bus(spi_inst); //选择总线 实现在xilinx_spi.c中
(5) spi_xfer(spi_inst, 32, data, NULL, SPI_XFER_BEGIN|SPI_XFER_END); 通信开始。