7809|22

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

2440从SPI 驱动的实现问题? [复制链接]

    由于单片机上已经实现了主SPI的代码,所以准备用2440实现一个从SPI驱动。
     通信的要求是,2440(从机)有时候也必须主动的给单片机发送数据,这就产生了一个问题,一般SPI的通信都是由主机控制的,主机给你发数据或者请求数据的时候,都会将NSS拉低来通知从机接收或者发送数据。但是无论如何主机也不能知道从机什么时候会主动发数据给它。
     我的想法是,从机再连一个GPIO到主机的外部中断口,要发送数据给主机的时候,先发送外部中断,主机相应外部中断后,向从机请求数据,然后从机再把准备好的数据发送给主机。但是这样的话,除了CLK/MOSI/MISO/NSS/四条线外,还的加一条中断线,比常见的SPI通信多了一条线。 由于以前做的SPI都比较简单,没碰到过这个问题,不知道我这样的理解对否,还是有更为合理的实现办法?
     还有就是主机拉低NSS后,平时没操作系统的话是马上会发送数据的,从机中断接收就好。但是由于WINCE的中断响应要比裸机
慢,会不会出现从机没有准备好就主机就开始发送数据的问题,如果有的话,怎么调整NSS拉低和主机发送数据的间隔比较合适,因为每一次响应中断的时间可能会有不同。

最新回复

有可能是IST太长了吧。你可以测试一下IST的,在每次响应IST的开头和结尾加个调试I/O看看!是不是堵在某个地方了!  详情 回复 发表于 2009-4-13 15:23
点赞 关注

回复
举报

60

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
SPI可以动态做主从的,也就是说主从关系可以动态切换的
 
 

回复

93

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
如果动态做主从的话,那单片机的SPI驱动也的相应的进行调整对吗?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
最好加一根握手线
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
动态切换的话,是不是要发的时候设成主的,发完设成从的。如果是这样的话,如果碰到两头都要发的话,不就乱了吗?
感觉是不是加条握手线比较可靠一些。
 
 
 

回复

85

帖子

1

TA的资源

一粒金砂(初级)

6
 
对,就是你说的这样
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
最好是加一根单独的IO,作为从机的中断,用来通知主机,申请发送数据。

也可以将#SS复用,方法是:主机在不发送SPI的时候,将#SS配置成输入态IO口,可以允许从机将这个引脚拉低来通知主机。不过又要涉及“总线竞争”了,从机必须判断没有被#SS触发的前提下,才可以主动去拉低#SS。


其实倒不不用太担心你说的响应慢的问题,2440的SPI是硬件控制器,即使OS中响应不及时,在控制器中也有FIFO保存一定的数据,确保不会丢失的。
如果一定要解决这个问题,那也可以这样做:因为两边的程序都是你写的,主机#SS拉低触发从机后,可以先发送一个字节数据,等待从机返回一个应答数据,只有收到正确的应答,才确认可以开始传输。
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

8
 
好的,我做实验试试,先不结贴,碰到问题可能还要向几位请教!
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

9
 
楼上说的都对,不用担心慢,担心单片机就行了。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

10
 
我把2440设成从的,中断接收.然后要给主的写数据的时候,先给主的一个外部中断,主的接收到外部中断后,在中断
里面对2440的数据进行读操作,首先将2440的NSS拉低,然后进行读操作.示波器上能看到,时钟,以及NSS被拉低,可是
没有数据出来,所以读到的都是FF 两边的波特率,以及模式设置的都应该是对的.不知道怎么回事?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

11
 
从SPI在什么时候会产生中断?   NSS被拉低还是一个字节读写完毕的时候?
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

12
 
仔细看了示波器,主的发出来的时序.没有问题.按道理只要中断开了以后,接收完一个数据总该有个中断IST的,可
IST就是没有响应.
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

13
 
看看你的SPI配置啊,通道有没开通什么的
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

14
 
CS CLK  DATA 三线时序要全对,SPI的底层固件才会正常识别,正常识别才能去触发中断(并且你的中断要使能了)
 
 
 

回复

93

帖子

0

TA的资源

一粒金砂(初级)

15
 
mark下
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

16
 
中断响应搞定了。低级错误,地址映射错了,导致对INTMASK的操作无效。谢谢xqhrs232!
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

17
 
   果然.采用接收一个字节产生一个中断的方式速度好像上不去.
假设接收一个字节后SPI中断开始响应.CPU先处理SPI中断IST,然后响应ISR.等ISR处理结束后,再开启中断接收下
一个字节,这中间我测试了一下.要10MS.也就是说接收一个字节要10MS的时间,这有点恐怖了.一分钟下来
也就100个字节,速度还不如串口了.
   所以为了真正体现SPI的速度优势.是不是可以这样做,定义报文协议,第一个字节又中断产生,然后给出要传送的数据长度,接下来在同一个ISR中采用查询方式全部接收,理论上可行,但是没调试过,不知道论坛有人做过否? 还是的动用DMA之类的高级处理方式才能真正提高速度!还是我思路有问题!
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

18
 
速度还不如串口?你牛啊,敢下这样的结论
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

19
 
呵呵,只是我实验的结果。见笑了。不过如果每个字节都产生中断,确实挺慢的。不知道xqhrs232
有什么好思路。我这边DMA又全部被用了。只能中断或者查询接收。是不是可以中断IST里面直接把数据处理了,不调用ISR这样会快些!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

20
 
波特率倒是可以几十M的往上用。只是每个字节间隔要是太大了,也是会降慢速度的啊。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表