请问马老师,在您《AVR单片机嵌入式系统原理与应用实践》书中的SPI应用
马老师您好,在书中的SPI的应用中说到74HC164的应用,164是在CLK的上升沿移位的,书上写的是工作在SPI的模式0,但我对照SPI的模式发现模式0是下降沿溢出数据的,对此不解,谢谢解答 mark!!!!! 我一直对这个问题 也有点模糊!~!!!!!那位高人解答下 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与其它串口芯片连接,就可以正确选择工作模式了。 "使用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. 回复【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.
-----------------------------------------------------------------------
马老师是华师大的老师 回复【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%本专业的学生在设计中是忽视的,甚至是不理解。不信你做个调查,问有多少学生仔细、全面和彻底看懂一个器件手册吗?
我在学生中口碑不好,老是批评学生,说话也比较尖酸。但是,我是真心希望学生好,希望他们能学到真正的本事,在激烈的社会中打拼。
我认为,学生这样的情况也承受不了,他们如何面对公司企业老板的冷眼? 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. you are also not on "the real thing" 谢谢马老师的回复,需要仔细体会下 歪个楼啊,学英语
"想过为什么上升沿和下降沿都是斜的,而不是垂直的吗? "
wow! you teach at a university? I feel bad for the kids who take your classes
他这句话想表达什么意思?
觉得上马老师课的学生专业水平很差劲
觉得上马老师课的学生挺可怜
别无他意,就是讨论英语 他的意思是我对学生不尊重,不适合在大学做教师吧。---这是我的理解。
这位先生应该是中国人吧,因为这里的中文帖子好象都看的懂。但不知道为什么回贴总是写英文,可能是想提高大家或测试我的英文水平?
LZ的贴已经半年了,没有人有实质的回贴,此时不知道他在哪里?
我给出了我的解答和解释,并具体用图说明或证明我的观点的正确性。当然也可能是错误的,大家可以讨论,这里本身就是一个技术上相互学习和交流的地方。
这位先生好象认为我说的不对,认为我不要多讲“理论”(其实,这个图本身没有什么理论,是最基本的专业基础常识),应该讲实际的东西。
可是他更是什么实际的东西也没有给出,只是用一个“a new hardware”做为反驳。
至于我的教学方式方法,没有必要在这里争论。我想用2句中国的老话表明我的态度:“严师出高徒”,“打是亲骂是爱”---学生能真正学到本事是最重要的 on the real thing。
我的英文非常差,麻烦millwood0先生能把这2句中国的老话翻成英文了,谢谢。 fire 这哥们是中国人,在国外,好像不方便输入中文
他说的第一句是很奇怪,这个问题和外设没关系,如不能保证AVR输出的CLK和DATA的时序关系,再牛逼的外设也没用啊 "使用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的时序图做解释吧。 刚开始学avr,从自制isp开始了 回复【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的区别就出现了。 做下笔记 路过路过了顺便看看
页:
[1]