上次用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;
}