首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请问高手:LIN 主站接收数据的问题

请问高手:LIN 主站接收数据的问题

我用的主站是DP256开发板,外接了一片MC33399。从站是QL4开发板。
主站在连续发送报文头:13位低电平+0X55+ID;从站接收到ID后,发送8个字节的数据,即RESPOND。我用示波器观察总线,发现此时报文头和RESPOND连在一起,成为大于13个字节的一串高低电平。
请问:1、主站需要接收从站的回答数据,前面的报文头也就会接收下来。那么13个低电平的BREAK怎么处理呢?它不是一个字节呀。
2、不同报文的ID有优先级,这个怎么处理?
谢谢帮忙!!
同时,再次恳请版主能否把飞思卡尔做过LIN的技术支持工程师的联系方式发给我。万分感谢!!邮箱是whccxx@sohu.com
学无止境
1. 主机在发送报头时,它自己是知道的。此时完全可以让它不接收数据,即可;

2. 从机及各种报文的优先级由你自己决定。如何处理和响应由程序确定。
海纳百川  有容乃大
请教版主strongchen:主机发送完报头后,是不是应该在等待回应?接收回应数据用中断处理,这样必然会接收报头的啊。我现在就是不太清楚这个处理过程。看飞思卡尔的例程中,有一个FE中断,好像是要忽略,看不明白。能否请您说得详细一些。谢谢!!
请问版主:您是在北京吗?能否把联系方式告知,万分感谢!!!
学无止境
请到LIN论坛下载LIN协议仔细阅读。要做LIN通讯,这个时间还是要花的吧。

看过协议你就会知道,报头只是主机会发出,从机回应时是不发报头的。
海纳百川  有容乃大
主机肯定也能接受到报头,但是接着也会接受到ID号,主机可根据ID号确定是命令数据还是请求数据,如果是请求数据则需要从机回应,一般有一个回应的时间限制.
xiaoxiaoer,能否再去看看我的问题?
立志做个专业的工程师
如果方便的话,能否把您的lin主的飞思卡尔的例程发送给我,我现在用的是GZ8作为主机,找了好久找不到类子,很想看看类似的软件参考一下.
立志做个专业的工程师
不好意思,忘了写邮箱.xmq0000@sina.com or xmq1111@163.com.我也在作LIN系统,有问题希望一起讨论.
立志做个专业的工程师
版主strongchen:协议我看过,主站发报头在LIN总线上,从站回应数据,共同组成一个报文。主站我连续发同一个报头,从站也回应同样的数据,在LIN总线上我能看到一个完整的报文。这样在主站接收数据时,必然要先接收到报头后才会是RESPOND的。目前,我能接收到从站的数据,但是情况不对。我这样做是想先把通路打通了,过程搞清楚了,那么以后发送何种报头,回应RESPOND,都是一样的。
所以,我想知道,在主站使用SCI如何接收RESPOND?主MCU是不可能过滤报头的。谢谢!!
学无止境
报头是主MCU自己发出的,它为什么不能过滤?

当然主MCU也可以不过滤报头。但是它知道何时发出了BREAK,此时会产生FE标志和其他相应的标志。而主MCU此时应用该知道如何处理。
海纳百川  有容乃大
主机发送完,才开始接收,在软件里接收使能。
可能是我没有说清楚。主站是这样的:我在主程序中连续发送报头,使用SCI接收中断接收IN总线上的数据,预先设置了11个字节的数组。用示波器在总线上可以看到一串同样的完整报文(包含报头和RESPOND),间隔40毫秒。
我想知道我用示波器看到的现象对吗?这样子接收是不是就把整个报文接收下来了?我现在是能接收到一些数据,但不是完整的报文,象0X55和ID都收到过,11个字节的数组里面的数据不是确定顺序的数据,而是发送的数据比较随机的排列,经常是相邻的两个字节接收的一样。
请教版主:产生的FE标志位有什么用?应该怎样利用它做贡献?
能不能说得详细些?我不明白主MCU该怎样处理。只有我知道了,主MCU 才会知道怎么处理呀。
学无止境
我来说说吧:
所有在LIN总线上的数据mcu都可以接受到,不管是主发送的还是从回应的.你所要作的就是对这些数据进行处理.
你可以按照上楼老兄的说法,只有从回应的数据主才接受,这时就要对SCC2(GZ8)进行一些设置,在等待从回应的时候才打开接受器如:
tmp=SCS1;                      //清除SCRF标志位.
tmp=SCDR;
SCC2_RE=1;                     //准备接受回应
SCC2_SCRIE=1;
在非等待从回应的状态下就关闭接受器.

SCC2_RE=1;                     //准备接受回应
SCC2_SCRIE=1;

另外一种方法就是版主说的方法:
可以通过FE标志位等来判断,这时候就是把所有的数据都接受下来,不过是主发向从的,还是从回应的数据.当主接受到break field时,就会产生FE的帧错误.这个错误也可以产生中断,自己软件再去考虑怎么去接受数据.
你去看看FE标志是怎么产生的,就知道为什么break field一定会有FE错误.多看看DATASHEET.
立志做个专业的工程师
谢谢天涯,我给你发了飞思卡尔的例程,不知你收到了没有。
你的意思是在发送报头以后才打开接收器,对吧?我去试试。再次感谢!!
学无止境
对,这样应该可以.
我用的是后一种方法,已经调通了.但是接受数据的量会比前一钟方法大.
立志做个专业的工程师
我昨天已经能收到完整的一个报文了,谢谢大家的帮助!!
事实上,什么时候打开接收器好象关系不大,我总是能收到祯头的。所以我觉得在回应数据存在总线上的同时,祯头也存在。示波器看到的就是完整的一祯,既然都在总线上,肯定就会都接收下来。
不过,还有个问题没有想通:主站发向从站的祯头在时间轴上看必然在从站回应数据之前,为什么主站能接收到祯头呢?是不是33399能够把祯头再发送到总线上或者能保持在总线上?
请教了,谢谢!!
学无止境
返回列表