1. 程式人生 > >GPIO模擬SPI

GPIO模擬SPI

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