上次用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
时间: 2024-11-05 18:55:29