搜索
bottom↓
回复: 6

KEA128/64平台LIN总线的问题

[复制链接]

出0入0汤圆

发表于 2020-2-19 14:37:36 | 显示全部楼层 |阅读模式

我的实验环境是主机为KEA128的demo板子;从机的MCU是KEA64,LIN收发器是TJA1021。

再先说下现象(不考虑校验场的数据结果):

现象1.主机数据场第0字节数据是0x00的时候,从机接收的数据场数据丢失0x00,其它数据正常;

现象2.主机数据场第0字节数据不是0x00且后面也没有0x00的时候,从机接收的数据从数据场开始全部异常;

现象3.主机数据场第0字节数据不是0x00且后面第i字节的数据是0x00的时候,从机接收的数据从第0字节到第i字节全都异常,从第i+1字节开始的数据全都正常。

以下是各现象的截图:


主机发送的数据格式第0字节是LIN的CMD,第1字节是数据场长度,其它是数据场数据;

从机接收的数据格式依次是:同步场、PID、8字节数据场、校验场。

由于我手上现在没有示波器,LIN的波形需要在复工后才能测量了,想问下大家有哪些可能会导致我这个现象呢?

然后附上LIN的初始化代码
  1. /**
  2.   * @brief     初始化主机LIN总线,波特率设置为9600
  3.   * @param  None
  4.   * @retval   None
  5.   */
  6. void lin_init(void)
  7. {
  8.         UART_ConfigType Config = {{0}};

  9.         Config.u32SysClkHz = SystemCoreClock;
  10.         Config.u32Baudrate = 9600;
  11.         Config.bSbns = 0;
  12.         Config.sctrl2settings.bits.bRe = 1;
  13.         Config.sctrl2settings.bits.bTe = 1;
  14.         Config.sctrl2settings.bits.bRie = 1;
  15.         Config.sctrl3settings.bits.bBrk13 = 1; //间隔信号长度为13位

  16.         CONFIG_PIN_AS_GPIO(PTB, PTB2, OUTPUT); //EN引脚给高电平
  17.         GPIO_SetBits(PTB, PTB2);

  18.         CONFIG_PIN_AS_GPIO(PTB, PTB3, OUTPUT); //WAKE引脚给低电平
  19.         GPIO_ResetBits(PTB, PTB3);

  20.         SIM_PINSEL0 &= ~SIM_PINSEL_UART0PS_MASK; //强制选择UART0的通信脚为PTB0/1

  21.         UART_Init(LIN_UART_NUM, &Config);

  22.         UART_SetCallback(LIN_UART_NUM, lin_rcv);
  23. }
复制代码
  1. /**
  2.   * @brief     初始化从机LIN总线,波特率设置为9600
  3.   * @param  None
  4.   * @retval   None
  5.   */
  6. void lin_init(void)
  7. {
  8.         UART_ConfigType Config = {{0}};

  9.         Config.u32SysClkHz = SystemCoreClock;
  10.         Config.u32Baudrate = 9600;
  11.         Config.bSbns = 0;
  12.         Config.sctrl2settings.bits.bRe = 1;
  13.         Config.sctrl2settings.bits.bTe = 1;
  14.         Config.sctrl2settings.bits.bRie = 1;
  15.         Config.sctrl3settings.bits.bBrk13 = 1; //间隔信号发送长度为13位

  16.         CONFIG_PIN_AS_GPIO(PTD, PTD5, OUTPUT); //不让TJA1021进入休眠模式(下降沿有效)
  17.         GPIO_SetBits(PTD, PTD5);

  18.         UART_Init(LIN_UART_NUM, &Config);

  19.         UART_SetCallback(LIN_UART_NUM, lin_rcv);
  20. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2020-2-19 15:09:17 | 显示全部楼层
KEA系列单片机调试LIN确实各种问题,要踩一些坑。方法:一边调试一边查看UART外设寄存器的值

出0入0汤圆

 楼主| 发表于 2020-2-19 15:22:46 | 显示全部楼层
adlkkang 发表于 2020-2-19 15:09
KEA系列单片机调试LIN确实各种问题,要踩一些坑。方法:一边调试一边查看UART外设寄存器的值 ...

太头疼了,数据场的这种变化没有示波器真的不知道啥情况……您所说的观察UART寄存器的值,在数据场里面能观察到寄存器UARTx_S1的FE(Framing Error Flag)的值是1,我感觉这个应该能指导我的数据场数据在传输的时候是有问题的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-2-24 14:46:44 | 显示全部楼层
時鐘FEI、FEE?

出0入0汤圆

 楼主| 发表于 2020-2-26 14:19:43 | 显示全部楼层
结下帖子,问题已经找到。KEA64的芯片手册描述有误,出厂的IRC值应该为31.25kHz,不是32kHz

出0入0汤圆

发表于 2020-2-27 11:37:56 | 显示全部楼层
笔记本的自嘲 发表于 2020-2-26 14:19
结下帖子,问题已经找到。KEA64的芯片手册描述有误,出厂的IRC值应该为31.25kHz,不是32kHz ...

你有試過新的芯片燒錄時不設定IRC那個ICS_C3的值
程序還能跑嗎?

我最近遇到1k有3%的MCU設一樣的值跑出來的頻率會比其他顆少0.5~1MHz

出0入0汤圆

 楼主| 发表于 2020-2-28 16:14:14 | 显示全部楼层
zxzx8059 发表于 2020-2-27 11:37
你有試過新的芯片燒錄時不設定IRC那個ICS_C3的值
程序還能跑嗎?

我这边都不操作C3寄存器的,直接用16M主频跑。
官方对于C3的操作有一个专门的帖子,我发不了链接,我发一下帖子名字,你自己搜一下吧,见下面:
使用CodeWarrior10.5软件的PE工具trim芯片内部慢速时钟

我自己测试了一下,总线设置成20M后误差在3.75%,偏差太大了,还是用16M算了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 19:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表