文档章节

MC9S12G系列mcu spi波特率特性研究

Tomato666
 Tomato666
发布于 2017/09/11 23:26
字数 1499
阅读 2
收藏 0

出现问题 :

1. 9s12G系列控制板采用MC33662外部LIN芯片,使用高速模式后,在115200波特率下无法与labview上位机进行正常通讯,但是MC9S12VR系列单片机采用高速通讯模式后(使用内部LIN芯片),115200 波特率下能够与上位机通讯。

2. 上位机发送通讯报文,停止位按照软件设置发送,但是下位机通讯报文停止位没有根据寄存器设置一致,而且与波特率有关,是否有问题?

 

查找过程:

查阅芯片手册和相关文档,硬件结构不一样,外部LIN芯片高速模式速度上限为100Kbps,内部LIN高速模式下上限为250Kbps。

 

①测量115200波特率下 MC9S12G产品样件 通讯波形,可以发现:

上位机(串口助手 和 逻辑分析仪)识别为 82 E2 D2 A0,实际应为 02 C2 92 50

上位机(串口助手)设置的停止位为2,图①-2,下位机(MC9S12G产品样件)停止位为2.94 bit,图①-3,然而根据datasheet,停止位只能设置成1bit无法设置成其它,所以此现象需要进一步分析是否为MCU硬件表现。

 

图①-1 逻辑分析发送接收波形

 

  

图①-2 逻辑分析仪发送波形 

 

 

图①-3 逻辑分析仪接收波形

 

 

图①-4 原始发送接收波形

 

 

图①-5 原始上位机发送波形

 

  

图①-6 原始下位机反馈报文波形

 

②测量115200波特率下MC9S12VR 样件 通讯波形,可以发现:

能够与上位机进行正常通讯,解析出的数据没有问题;

上位机停止位正常为2bit,下位机停止位为4bit(软件设置为1bit);

 

图②-1 逻辑分析仪整体通讯波形

 

 

图②-2 逻辑分析仪下位机反馈波形图

 

 

图②-3 整体发送原始波形

 

 

图②-4 原始上位机发送波形

 

③测量19200波特率下MC9S12VR 样件通讯波形,可以发现:

上位机发送报文停止位为2bit,下位机反馈报文停止位也为2bit,然而下位机程序里相关SCI设置寄存器没有改变,程序设置仍为1bit的停止位;

  

图③-1 原始RJ通讯波形

 

  

图③-2 逻辑分析仪整体波形

 

 

图③-3 逻辑分析下位机反馈报文波形

 

④测量19200波特率下MC9S12G样件 通讯波形,可以发现:

现象与19200波特率下MC9S12VR表现一致

 

图④-1 原始波形发送接收报文波形

 

 

图④-2 逻辑分析仪波形

 

 

图④-3 逻辑分析仪上位机发送信号波形

 

 

图④-4 逻辑分析仪下位机反馈报文

 

结论分析:

115200波特率下,两种芯片样件反馈报文对比,如下图,黄色为VR芯片反馈报文波形,为正确的,红色为G芯片反馈报文波形,从比较结果来看,并不是波形不良造成了解析错误,而是发送出来的波形就不正确。

 

115200波特率下 MC9S12VR(黄)MC9212G(红)反馈报文(02 C2 92 50)波形比较图

 

继续分析,需要找到是MCU的问题还是LIN芯片的问题,测量下图所示的TX 脚和 LIN

 

MC9S12G 硬件原理图截取

 

测得波形如下图所示,根据波形分析,LIN芯片完全按照TX脚信号进行处理,没有问题,MCU发的反馈报文波形就错了,致此已经定位到MCU发送波形错误,下一步继续分析是软件bug还是MCU硬件不支持。

 

绿线为LIN,黄线为TX脚

 

 

LIN&TX 放大比对

  后续经同事追查后发现,在设置为115200 波特率下,G芯片板子向外发送的LIN信号与VR芯片向外发送的波形近似但相位有差别,所以反向计算,算得发出的波形波特率为127551,与设定波特率115200 误差差为10.72% ,导致了G芯片发出波形上位机解析错误的情况,问题分析到现在可以发现,G系列芯片对于通讯波特率容差要比PC上位机大,下图为G芯片通讯信号单bit时间测量。

基本定位为波特率设置出现问题,查找代码相关部分发现,通讯初始化波特率部分代码计算产生了较大误差,G系列初始化代码如下:

其中baudRate 为函数局部变量,通过外层形参传入,SCI_BUS_CLOCK 为定义的宏变量,值为 20 000 000 ,对应总线频率20Mhz,SCI_SBR_MASK掩码值为0x1F。

 
setbaud = (uint16)(SCI_BUS_CLOCK/16/baudRate);
	/* SCIBDH, SCIBDL,SCI_CR1 can only be read and write when SCI0SR2_AMAP =0 */
        SCI_Clr_8U_ByMask(SCI_SR2,SCISR2_AMAP_MASK);
        SCI_BDH = 0x00;       /* clear IREN and TNP */
        /* Set baud rate */
        SCI_BDH = ((uint8)(setbaud>>8))&(SCI_SBR_MASK);
        SCI_BDL = (uint8)(setbaud);

当baudRate 设定为115200 时,理论输出值应为 SCI_BDH = 0,SCI_BDL = 11.85 ,但程序中涉及寄存器赋值,强制转换为整形,最终输出结果为 

SCI_BDL = 10; 
SCI_BDH = 0;

10与11.85有 15.61% 的误差率。

VR系列波特率初始化代码如下:

setbaud = (uint16)((SCI_BUS_CLOCK/baudRate)+1);
        SCI_SR2 |= SCISR2_AMAP_MASK;
        SCI_ACR2 &= 0x1F;      /* clear IREN and TNP */
        /* SCIBDH, SCIBDL,SCI_CR1 can only be read and write when SCI0SR2_AMAP =0 */
        SCI_Clr_8U_ByMask(SCI_SR2,SCISR2_AMAP_MASK);
        /* Set baud rate */
        SCI_BD = (uint16)(setbaud);

 

当baudRate 设定为115200 时,理论输出值SCI_BD = 173.61,程序中涉及寄存器赋值,强制转换为整形,最终输出结果为 

SCI_BD = 174

与173.61 有 0.22% 的误差率。

根据理论计算可以发现由于代码产生的计算误差导致实际设定通讯波特率偏大,经过实验验证,将G芯片 SCI_BDL值改写成11后,可以进行正常通讯,所以经验证发现此设置为root cause

下图分别为数据手册上G系列和VR系列芯片波特率计算方式

G芯片波特率计算方式:

VR芯片波特率计算方式:

© 著作权归作者所有

共有 人打赏支持
Tomato666
粉丝 0
博文 3
码字总数 3893
作品 0
苏州
一文全面解答蓝牙4.2模块HY-40R204I 知识点,你要懂的都在这

HY-40R204I是昇润科技推出的一款2.4 GHz 蓝牙4.2模块,使用高性能TI CC2640R2F的芯片。仅需使用标准3V纽扣电池或一对AAA电池就可直接供电,最低功耗关断模式下,仅消耗0.15uA,并在几微秒内唤...

昇润科技
01/05
0
0
【转】 .Net Micro Framework 快速入门

.Net Micro Framework 快速入门 收藏 一、简介 Microsoft .NET Micro Framework 2001年由微软研究院开始研发,并随后在其MSN Direct项目中使用该技术,2007年9月微软对外发布2.0,2008年10月...

夏春涛
2011/02/27
0
0
AliOS Things 硬件抽象层(HAL)对接系列2 — SPI driver porting

HAL层(Hardware abstraction layer) 的目的是为了屏蔽底层不同芯片平台的差异,从而使驱动层上面的软件不会随芯片平台而改变。AliOS Things定义了全面的HAL抽象层,这个系列主要介绍AliOS...

泉墨170385
08/09
0
0
.Net Micro Framework 快速入门

一、简介 Microsoft .NET Micro Framework 2001年由微软研究院开始研发,并随后在其MSN Direct项目中使用该技术,2007年9月微软对外发布2.0,2008年10月 V3.0、2009年11月 V4.0、2010年5月 ...

物联网积木
2014/05/21
393
1
ESP8266-12F wifi模块烧录AT指令固件过程总结

由于在淘宝https://item.taobao.com/item.htm?spm=2013.1.w4004-14363447044.2.3d6d3e6dftfu0z&id=536609386865上买了几个乐鑫 ESP8266-12F 串口透传 wifi模块。到手后发现默认都被烧录的所谓...

baidu_17220503
04/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker Compose 原理

Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 dock...

Java干货分享
20分钟前
0
0
解决过滤器中设置cookie无效的问题

解决过滤器中设置cookie无效的问题 代码现场 filterChain.doFilter(sessionSyncRequestWrapper, response);Cookie emailCook = WebServletUtil.getSelectedCookie(request.getCookies(), ......

黄威
31分钟前
0
0
Hbase Schema 设计注意事项及最佳实践总结

一个列族的所有列在硬盘上存放在一起,使用这个特性可以把不同访问模式的列放在不同列族,以便隔离它们。这也是HBase被称为面向列族的存储(column-family-oriented store)的原因。 1、RowKe...

PeakFang-BOK
43分钟前
1
0
t-io给群组成员内置排序

1、实现比较器Comparator<ChannelContext> package xxx;import java.util.Comparator;import java.util.Objects;import java.util.Set;import java.util.TreeSet;import or......

talent-tan
47分钟前
2
0
px、em、rem 区别及作用

原文 起因: 一开始是为了解决页面放大时,字体不跟着放大的 bug。现在多用用于统一规范。 概念: 任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em...

lemos
56分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部