GPIO模擬SPI
阿新 • • 發佈:2019-04-18
led sdn -c ont amp mod tracking duration osi
結束條件:
傳輸數據:
上次用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; }
GPIO模擬SPI