文档章节

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

Tomato666
 Tomato666
发布于 2017/09/11 23:26
字数 1499
阅读 2
收藏 0
点赞 0
评论 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

【转】 .Net Micro Framework 快速入门

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

夏春涛 ⋅ 2011/02/27 ⋅ 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 ⋅ 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

学习东西总结:

一.JAVA 基础 1、JAVA并发编程 2.JAVA NIO系列 3.JVM深入了解 4.JAVA性能优化相关研究 5.JAVA7,8新特性 二、数据库 1.数据库优化研究 2.MYSQL高可用性研究 3.MYSQL源码研究 三、网络 1.HTTP...

QH_C ⋅ 2016/03/25 ⋅ 0

java程序猿技术栈

一、java 基础知识 1.1 java基础集合类 1.2 jdk1.5、1.6、1.7、1.8 特效比较 1.3 java异常处理 1.4 jvm原理及常见问题 1.5 log4j等日志收集 1.6 jdbc驱动 1.7 jdk反射机制使用和原理 1.8 ja...

南寒之星 ⋅ 2016/11/30 ⋅ 0

zephyr笔记 1.5 hello world

1 前言 在前一篇中学习了开发基础,接下来就开始玩些简单的程序。 这篇先研究下 内核例程1 Hello World。 我正在学习 Zephyr,一个很可能会用到很多物联网设备上的操作系统,如果你也感兴趣,...

iotisan ⋅ 04/16 ⋅ 0

嵌入式 -- WINKHUB 边信道攻击 (NAND Glitch)

0x00 前言 随着物联网IOT的飞速发展,各类嵌入式设备, 路由器安全研究也越来越火. 但因为跟以往纯软件安全研究的要求不同, 这类研究往往需要结合相应的硬件知识. 很多朋友困惑如何开始, 甚至卡...

广岛秋泽 ⋅ 2016/01/27 ⋅ 0

IBM研发新算法 商用量子技术或可期

人类从算盘,到计算器,再到计算机,计算力的提升速度在近200年内得到飞速增长,而在计算机出现之后,超级计算机也不甘示弱。以中国超算为例,在天河二号连续几次夺得世界冠军之后,在今年上...

雪花又一年 ⋅ 05/02 ⋅ 0

2018年​第1期《单片机与嵌入式系统应用》电子刊新鲜出炉!

2018年第1期《单片机与嵌入式系统应用》电子刊新鲜出炉! 2018年第1期电子刊精彩内容抢先看: 1.嵌入式系统开发中,如何选择适合的MCU平台? 2.C语言嵌入式系统编程软件设计架构研究 3.TMS3...

dp29sym41zygndvf ⋅ 01/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部