上次用gpio模拟i2c理解i2c协议。相同的,我用gpio模拟spi来理解spi协议。

我用的是4线spi,四线各自是片选、时钟、命令/数据、数据。

数据在时钟上升沿传递,数据表示的是数据还是命令由命令/数据线决定。

開始条件:

void spi_start(void)
{
gpio_config(GPIO_CS, GPIO_OUTPUT);
udelay(SPI_SPEED_DURATION);
gpio_set(GPIO_CS, 0);/* start condition */
udelay(SPI_SPEED_DURATION);
}

结束条件:

void spi_stop(void)
{
gpio_set(GPIO_CS, 1); /* stop condition */
udelay(SPI_SPEED_DURATION);
}

传输数据:

void spi_txdata_byte(uint8_t data)
{
int i = 0; for(i = 7; (i >= 0)&&(i <= 7); i--) {
gpio_set(GPIO_CLK, 0);//时钟上升沿传递数据
udelay(SPI_SPEED_DURATION);
if(i == 7) {
gpio_config(GPIO_MOSI, GPIO_OUTPUT);
udelay(SPI_SPEED_DURATION);
} gpio_set(GPIO_MOSI, (data >> i) & 0x01);
udelay(SPI_SPEED_DURATION);
gpio_set(GPIO_CLK, 1);
udelay(SPI_SPEED_DURATION * 2);
} return;
}

04-20 12:22