SPI通信总结

本文介绍了SPI通信的基本原理,包括一主一从的连接方式,使用51单片机进行SPI通信的方法,以及如何在FPGA中实现SPI通信。特别讨论了在不同设备中数据传输的时序要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


对于SPI通信,上面的连线便是简单的一主一从连线图,对于简单的通信模式,例如我们要使用51单片机(使用I/O口模拟SPI通信)对一个外置的模块,例如ADC模块,当然ADC模块是SPI接口,那么一个简单的发送数据的函数如下:

adc_spi_send(unsigned char data){
	ss = 0 ;//低电平表示选中AD,一般在程序开始直接拉低
	
	for(i=0;i<8;i++){
			sclk = 0;
			if(data && 0x80)
				mosi = 1;
			else 
				mosi =0;
			sclk = 1;
			data <<= 1;
		}	
}
      对于一般的MCU,AD模块都有数据建立时间和保持时间要求,所以对于一般使用MCU写SPI程序,都需要在sclk=0后,延时一段时间,具体看AD芯片时序,同样,在sclk=1之前也要延时一段时间。

      当然了,这个在FPGA里边就不是问题了,那么为啥呢,请看下边:

reg[7:0] mosi,data;
reg[4:0] i;
always @(posedge sclk or negedge reset)	begin
	if(!reset | (i == 4'd8)) begin
			sclk <= 1'b1;
			mosi <= 1'b1;
			i <= 1'b0;
		end
	else begin
				if(data[i])
					mosi <= 1'b1;
					i <= i+1;
				else
					mosi <= 1'b0;
					i <= i+1;
				
	  end
	end
		 
    上面的FPGA程序(肯定有bug)直接表明在sclk上升沿的时候开始传数据,并且在可以事先对FPGA的clk分频,达到AD模块的要求,然后我们就不用担心那些延时多少,频率达到了,自然就不用延时了,很理想的实现了芯片手册上的时序,个人感觉FPGA在实现对这些通信方面实现的很完美。

    然后还有一点需要注意到是我们在主机上已经准备好数据了,那么从机什么时候去取这个数据(高或者低),可以想想,在芯片内部对于是SCLK的上升沿取数据还是下降沿取数据,应该可以设计出吧,没有固定的,哈哈,说一句没有的话,具体问题具体分析。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值