7035C中7816-与ESAM通信问题分析与规避.docxVIP

7035C中7816-与ESAM通信问题分析与规避.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c7035C中7816与EASM通信出错的问题分析 1、错误场景: 7035C中7816与ESAM互连,上电复位,ESAM初始化会发出13帧初始化数据,以其中一片ESAM芯片为例,这13帧数据正确的值为(16进制数据): 3B、69、00、00、43、01、01、00、00、00、06、93、B9, 而7035C中的7816接收到的数据为: 3B、69、00、E8、01、00、06、D2。 数据丢失且出现错误。 2、问题定位: 通过示波器抓取ESAM与7816通讯的信号的波形发现,ESAM发出的数据符合理论值,而且发现这13帧数据发送的规律是:ESAM除了发送3B和69之间有一定的间隔,发送其余的帧时,帧与帧之间没有间隔,是连续发送的。ESAM发送初始帧的数据如图1所示: 图1 ESAM与7035C通信示波器波形示意图 由于篇幅限制,只画出了前六帧。 对比实际发送的数据,分析7035C中7816接收到的数据,我们发现了接收错误的规律:第一帧3B和第二帧69接收正确,第三帧00丢失,第四帧00接收正确,第五帧43错误接收为E8,也就是说除了有发送间隔的第一帧和第二帧,后面无间隔连续发送的数据帧接收丢失或者接收错误都是因为接收完前一帧后没有及时的监测到下一帧的起始位下降沿造成的。(设计中是通过下降沿来检测起始位的) 69和3B之间不是无间隔连续发送,所以可以监测到69帧的起始位下降沿,保证接收正确;而69和00之间是无间隔的,所以接收完69后错过了第三帧00帧的起始位下降沿,而下一个下降沿则会是第四帧00的起始位下降沿,所以第四帧00接收正确,然后错过第五帧43的起始位下降沿,下一个下降沿则是43帧中第二个下降沿,这样就会把第二个下降沿处的低电平当做起始位,后面的当做数据位,所以43帧则被错误的接收为E8,而且恰巧错误的校验位也完全匹配错误的数据,所以没有出现错误响应位。 结合13帧数据的波形,错误的数据完全支持这种分析,所以我们定位到问题就是:在ESAM无间隔连续发送时,7035C会错过后一帧数据的起始位下降沿,而把后一个下降沿处低电平当做起始位。 3、问题分析: 为什么会在连续接收时会错过起始位的下降沿?在设计之初,7816通信是半双工通信,所以在发送和一帧数据接收没有完成的时候不能接收下一帧数据,也就是说不能监测到下降沿也不会把它当作起始位。 在硬件中我们设计了一个状态信号rx_start,用来表示7816通信一帧的接收开始与完成,以ESAM初始帧中第二帧69与第三帧00连续接收为例,正常的情况如图2所示: 图2、正常的连续接收示意图 在图2中可见,在rx_start为低时(表示未处于接收状态),监测到下降沿,rx_fall信号(表示下降沿监测的信号)会拉高,一旦监测到rx_fall拉高,则表示接收到起始位,一帧数据接收开始,rx_start则会拉高直到响应位发送完毕后拉低。在rx_start拉高的状态下,即便监测到下降沿,rx_fall也不会拉高,直到rx_start为低。 从示波器中可知,ESAM发送的数据的长度为12ETU,1个起始位,8位数据,1位校验位,再加2ETU的接收响应的时间,总共12ETU。而在7035C中,在接收正确的情况下,无论响应位长度配置为1、1.5、2ETU,接收数据加发送响应位的时间总共为12ETU;在接收错误的情况下,接收帧的总长度为10ETU(1起始位+8数据+1校验位)+0.5ETU高电平+配置长度的响应位长度。 所以在接收正确的情况下,7035C接收端rx_start会拉高直到12ETU时间结束,理论上讲与ESAM的12ETU时间刚好匹配,但是7816是异步通讯,7035C的波特率和ESAM的波特率不可能完美匹配,是有偏差的,所以当7035C的波特率小于ESAM的波特率时,就会出现下面的情况,如图3所示: 图3、错误情况示意图 当7035C的波特率略小于ESAM的波特率时,会让rx_start拉高的时间略长于ESAM的12ETU时间,然而7035C是无间隔连续接收的,rx_start拉高时间的延长导致在下一帧的起始位下降沿处,rx_fall无法拉高,从而导致了错过了下一帧起始位。然后在rx_start很快拉低后,会把下一个下降沿当作起始位下降沿,从而开启新一帧数据接收,这样就产生了错误或丢帧。 4、问题规避: 理论上讲在发送正确的情况下,如果响应位的长度是可以随着配置的响应位长度变化的话,则我们可以将7035C的响应位长度配置为1ETU,这样就可以避开双方波特率有偏差不匹配的问题。但是在设计中我们是将接收正确的情况下,响应位长度为做死为1.5ETU的。所以无法通过此办法解决这个问题。 但是根据示波器中的波形,我们发现7035C与ESAM的偏差并不是非常大,我们考虑

文档评论(0)

hhuiws1482 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档