说在前面
这不是一个入门帖,需要有常用硬件通信协议的基础和数字电路verilog的基础。
什么是同步通信?什么是异步通信?
个人理解
在硬件通信协议上,异步通信收发模块双方可以工作在不同的时钟域,同步通信收发模块双方工作在同一个时钟域。
在软件通信协议上,另有定义。
截取中文互联网上的一些回答
百度百科
https://baike.baidu.com/item/%E5%BC%82%E6%AD%A5%E9%80%9A%E4%BF%A1
异步通信是指通信中两个字符(8位)之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。
https://baike.baidu.com/item/%E5%90%8C%E6%AD%A5%E9%80%9A%E4%BF%A1
同步通信是一种比特同步通信技术,要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送/接收。
结论
百度百科的定义从他的描述来看,没有抓住同步通信和异步通信的决定性区别,只是把个别典型的同步通信和异步通信的的特点描述了一遍,以偏概全,参考价值不大。
某CSDN贴
异步通信:异步通信中的接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。
同步通信:同步通信中双方使用频率一致的时钟,它的分组相比异步则大得多,称为一个数据帧,通过独特的bit串作为启停标识。
结论
结论是异步通信收发双方用各自的时钟,同步通信双方使用同一个时钟。
问题矛盾
SPI被认为是同步通信,在了解一些SPI从机verilog实现时,发现很多人实现方法为:用从机的本地时钟异步地采样SCK,来判断何时用与数据信号异步的本地时钟对数据进行采样(和放出新的数据)。
SPI从机实现案例
https://blog.csdn.net/weixin_45614076/article/details/126887159
https://blog.csdn.net/qq_40893012/article/details/103995154
这种实现方式在我个人理解上就已经不算是一个同步通信的过程了,这只能算是一个带同步信号的异步通信。
“同步通信中双方使用频率一致的时钟”这句话的理解,我认为就是说同步通信收发模块双方工作在同一个时钟域对数据进行传输。如果说SPI从机采用上述方式实现,那这根本就不符合。
如果硬要说,通信双方之间连接了共同的线,这条线上有类似与时钟样式的波形(但实则并不是起到一个时钟的作用),也叫做“同步通信中双方使用频率一致的时钟”,那个人认为这种解释很牵强,这个线也不应该被叫做同步时钟,叫做同步信号线可能更不会误导别人,因为它根本没有起到一个时钟的作用。
如果说上述SPI从机的实现方法也能被认为是同步通信协议,那是不是对同步通信定义变成了:通过某种方式向对收发模块双方提供每一位数据的同步信号的通信协议?这个定义是不太严谨,什么样叫提供了同步信号?比如UART它也有起始位来告知在什么时间后的一段时间后采样数据,这就不叫提供了同步信号了吗?
因此如果上述的SPI从机的实现方式,也能被称为同步通信的话,那么我想对同步通信和异步通信的定义是很不清晰的。
如果我之前对同步通信和异步通信的定义的理解是正确的,那么要么SPI就不完全是一个同步通信协议,要么这些实现SPI从机的方法就是不恰当的。
欢迎懂的人讨论自己的见解,说套话的别回复。