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;
}




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM