marshallemon 发表于 2011-2-24 20:25:19

请问马老师,在您《AVR单片机嵌入式系统原理与应用实践》书中的SPI应用

马老师您好,在书中的SPI的应用中说到74HC164的应用,164是在CLK的上升沿移位的,书上写的是工作在SPI的模式0,但我对照SPI的模式发现模式0是下降沿溢出数据的,对此不解,谢谢解答

zhouaheng 发表于 2011-8-25 01:55:05

mark!!!!!

zhouaheng 发表于 2011-8-25 01:55:55

我一直对这个问题 也有点模糊!~!!!!!
那位高人解答下

machao 发表于 2011-8-26 04:54:48

SPI的模式0:

在时钟下降沿时移出数据,是指把自己内部移位寄存器中一端的1位数据送到数据线上(MOSI);
在时钟上升沿时锁存数据,是指把数据线上(MISO)数据锁入到自己内部移位寄存器中另一端中;

    与164配合:SPI口下降沿时,将自己内部移位寄存器中一端的一位数据送到数据线上(MOSI口,也就是164的A1/A1口);在CLK低电平阶段,这个MOSI和A1/A1连线为稳定的低电平(输出0)或高电平(输出1),当CLK上升沿时,这个电平(数据)移入到164内部移位寄存器中。而这个例子中,MISO没有连接,内部上拉有效的话,因此,当CLK上升沿时在164把MOSI线上数据移入自己内部的同时,SPI也把“1”锁入到自己内部移位寄存器中另一端。

如果你问,使用SPI的模式2可以吗?在时钟上升沿时移出数据,并同时打入164?

我说:不可以。

你又要问了,为什么?很多代码是使用模式2的,好象也正常。

我说,可能正常,但不稳定。而且一旦不稳定,你根本无法解决,甚至都不知道问题出在那里,找不到原因。原因是,上升沿SPI打出数据时,MOSI到A1/A2的数据线的电平在变化,可能从高到低,也可能从低到高,当然也会不变的。不变的话,同时打入164不会出问题。问题时电平变化过程中,这个“同时”打入到164是什么数据?是高电平5V,还是低电平0V,还是2.5V电平?如果MOSI到A1/A2的连线比较长,平行与其它线走,就更可怕了。

    仔细看过时序图吗?,了解为什么详细的时序图上会标出那么些各种各样的时间吗?想过为什么上升沿和下降沿都是斜的,而不是垂直的吗?
    http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_671252Y8UUXR.jpg
(原文件名:未命名.jpg)

前一个椭圆为SPI打出数据时间,可以看都MOSI是交叉的,表示不稳定,变化。
后一个椭圆应该是MOSI数据稳定阶段,固定在高或低的状态,合理是在此处打入164。

还有问题:使用SPI模式3可以吗,此时也是下出数据,上打入164?

这个请上面2位回答。如果可以的话,与模式0有什么区别?
===================================================================
如果能彻底清楚,那么以后使用SPI与其它串口芯片连接,就可以正确选择工作模式了。

millwood0 发表于 2011-8-26 06:47:33

"使用SPI的模式2可以吗?在时钟上升沿时移出数据,并同时打入164?

我说:不可以。 "

have you ever tried this on a new hardware? or you just wrote whatever that came to your mind?

"想过为什么上升沿和下降沿都是斜的,而不是垂直的吗? "

wow! you teach at a university? I feel bad for the kids who take your classes.

jiwm 发表于 2011-8-26 08:33:01

回复【4楼】millwood0
"使用spi的模式2可以吗?在时钟上升沿时移出数据,并同时打入164?
我说:不可以。 "
have you ever tried this on a new hardware? or you just wrote whatever that came to your mind?
"想过为什么上升沿和下降沿都是斜的,而不是垂直的吗? "
wow! you teach at a university? i feel bad for the kids who take your classes.

-----------------------------------------------------------------------

马老师是华师大的老师

machao 发表于 2011-8-26 18:57:21

回复【4楼】millwood0
"使用spi的模式2可以吗?在时钟上升沿时移出数据,并同时打入164?
我说:不可以。 "
have you ever tried this on a new hardware? or you just wrote whatever that came to your mind?
"想过为什么上升沿和下降沿都是斜的,而不是垂直的吗? "
wow! you teach at a university? i feel bad for the kids who take your classes.

-----------------------------------------------------------------------

1.是我的观点,下边也给出了我认为不可以的分析。如果你认为可以,请给出例子和解释。或解释一下a new hardware是什么标准。

2.我是在高校教书工作。"想过为什么上升沿和下降沿都是斜的,而不是垂直的吗? " 这个看起来是最基础的概念,但80%本专业的学生在设计中是忽视的,甚至是不理解。不信你做个调查,问有多少学生仔细、全面和彻底看懂一个器件手册吗?
我在学生中口碑不好,老是批评学生,说话也比较尖酸。但是,我是真心希望学生好,希望他们能学到真正的本事,在激烈的社会中打拼。
我认为,学生这样的情况也承受不了,他们如何面对公司企业老板的冷眼?

millwood0 发表于 2011-8-27 03:02:42

my point to you is that you should rely more on the real thing, rather than "theories". rarely things work the way you think they work.

machao 发表于 2011-8-27 05:09:58

you are also not on "the real thing"

marshallemon 发表于 2011-8-27 08:40:25

谢谢马老师的回复,需要仔细体会下

packer 发表于 2011-8-27 10:08:12

歪个楼啊,学英语

"想过为什么上升沿和下降沿都是斜的,而不是垂直的吗? "
wow! you teach at a university? I feel bad for the kids who take your classes

他这句话想表达什么意思?
觉得上马老师课的学生专业水平很差劲
觉得上马老师课的学生挺可怜

别无他意,就是讨论英语

machao 发表于 2011-8-27 14:49:45

他的意思是我对学生不尊重,不适合在大学做教师吧。---这是我的理解。

这位先生应该是中国人吧,因为这里的中文帖子好象都看的懂。但不知道为什么回贴总是写英文,可能是想提高大家或测试我的英文水平?

LZ的贴已经半年了,没有人有实质的回贴,此时不知道他在哪里?

我给出了我的解答和解释,并具体用图说明或证明我的观点的正确性。当然也可能是错误的,大家可以讨论,这里本身就是一个技术上相互学习和交流的地方。

这位先生好象认为我说的不对,认为我不要多讲“理论”(其实,这个图本身没有什么理论,是最基本的专业基础常识),应该讲实际的东西。

可是他更是什么实际的东西也没有给出,只是用一个“a new hardware”做为反驳。

至于我的教学方式方法,没有必要在这里争论。我想用2句中国的老话表明我的态度:“严师出高徒”,“打是亲骂是爱”---学生能真正学到本事是最重要的 on the real thing。

我的英文非常差,麻烦millwood0先生能把这2句中国的老话翻成英文了,谢谢。

ooppoo11 发表于 2011-8-27 15:49:32

fire

packer 发表于 2011-8-27 19:12:48

这哥们是中国人,在国外,好像不方便输入中文
他说的第一句是很奇怪,这个问题和外设没关系,如不能保证AVR输出的CLK和DATA的时序关系,再牛逼的外设也没用啊

machao 发表于 2011-8-27 22:07:20

"使用SPI的模式2可以吗?在时钟上升沿时移出数据,并同时打入164?

我说:不可以。 "

have you ever tried this on a new hardware? or you just wrote whatever that came to your mind?
===================================================================================================
以上是原文了。

    该朋友应该认为我的“不可以”说法是错误的,是想象的,没有实践做过。他提到了“a new hardware”,那么应该是这个“a new hardware”是可以的。

    我也不清楚这个“a new hardware”是什么?是指新的器件?还是新的标准,还是新的接口。想学点新东西,所以我在6楼就问“a new hardware”是指的什么。

    而他在7楼回答更是奇怪,说我应该注重实际的东西,而不是理论。可是这位朋友自己什么实际的东西也没有给出吗。至少我还贴上一个SPI的时序图做解释吧。

cnhcl2010 发表于 2011-9-24 09:28:49

刚开始学avr,从自制isp开始了

ahit 发表于 2011-9-27 13:21:54

回复【3楼】machao
spi的模式0:
在时钟下降沿时移出数据,是指把自己内部移位寄存器中一端的1位数据送到数据线上(mosi);
在时钟上升沿时锁存数据,是指把数据线上(miso)数据锁入到自己内部移位寄存器中另一端中;
    与164配合:spi口下降沿时,将自己内部移位寄存器中一端的一位数据送到数据线上(mosi口,也就是164的a1/a1口);在clk低电平阶段,这个mosi和a1/a1连线为稳定的低电平(输出0)或高电平(输出1),当clk上升沿时,这个电平(数据)移入到164内部移位寄存器中。而这个例子中,miso没有连接,内部上拉有效的话,因此,当clk上升沿时在164把mosi线上数据移入自己内部的同时,spi也把“1”锁入到自己内部移位寄存器中另一端。
如果你问,使用spi的模式2可以吗?在时钟上升沿时移出数据,并同时打入164?
我说:不可以。
你又要问了,为什么?很多代码是使用模式2的,......
-----------------------------------------------------------------------

我刚刚开始学avr,正看到spi这里,说一下自己的看法,手头连164器件都没有,请马老师和大家看看对不对?

我的看法和马老师一样(假设我理解的是一样的),164的时序规定了上升沿时从MOSI线上读入OA,OA-OB...OH,那么意思就是说,只在上升沿数据稳定时才能读取,而模式1,2是下降沿触发采样(锁存),上升沿是将数据送到数据线上(做好准备),所以模式1,2就不可以了。

模式3是用在164上面的。因为遵循上升沿读入164的原则。但模式0和3的主要区别是,0上升沿之前,认为数据已在线上;而模式3要在sck下降沿的时候先将数据送到线上准备好,然后等待上升沿读入164.



下面的* 是有疑问的

* 如果使用马老师第二版教材445页上面的,利用写spi的SPDR寄存器启动自动发送过程的话(不使能spi中断,但利用轮询中断标志的方法,等待发送1字节完毕),那么模式3和0是没有区别的,因为都是SPDR准备。
* 如果是通过软件模拟spi的sck,以及自定义任意端口作为MOSI的话,那么使用模式3时,要先clear sck,再将数据送到MOSI上,然后再rise sck;模式0是假定已经准备好,直接rise sck。这时模式0和模式3的区别就出现了。

taocongrong 发表于 2011-12-20 15:02:46

yikuang 发表于 2012-10-31 22:32:58

做下笔记

xuanfong1 发表于 2014-4-27 21:07:11

路过路过了顺便看看
页: [1]
查看完整版本: 请问马老师,在您《AVR单片机嵌入式系统原理与应用实践》书中的SPI应用