首页 > 代码库 > GPIO模拟SPI

GPIO模拟SPI

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