amobbs.com 阿莫电子技术论坛

标题: KEA128/64平台LIN总线的问题 [打印本页]

作者: 笔记本的自嘲    时间: 2020-2-19 14:37
标题: KEA128/64平台LIN总线的问题

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

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

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

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

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

以下是各现象的截图:

[attach]500625[/attach][attach]500626[/attach][attach]500627[/attach][attach]500628[/attach][attach]500629[/attach]

主机发送的数据格式第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. }
复制代码

作者: adlkkang    时间: 2020-2-19 15:09
KEA系列单片机调试LIN确实各种问题,要踩一些坑。方法:一边调试一边查看UART外设寄存器的值
作者: 笔记本的自嘲    时间: 2020-2-19 15:22
adlkkang 发表于 2020-2-19 15:09
KEA系列单片机调试LIN确实各种问题,要踩一些坑。方法:一边调试一边查看UART外设寄存器的值 ...

太头疼了,数据场的这种变化没有示波器真的不知道啥情况……您所说的观察UART寄存器的值,在数据场里面能观察到寄存器UARTx_S1的FE(Framing Error Flag)的值是1,我感觉这个应该能指导我的数据场数据在传输的时候是有问题的
[attach]500637[/attach]
作者: zxzx8059    时间: 2020-2-24 14:46
時鐘FEI、FEE?

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

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

我最近遇到1k有3%的MCU設一樣的值跑出來的頻率會比其他顆少0.5~1MHz
作者: 笔记本的自嘲    时间: 2020-2-28 16:14
zxzx8059 发表于 2020-2-27 11:37
你有試過新的芯片燒錄時不設定IRC那個ICS_C3的值
程序還能跑嗎?

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

我自己测试了一下,总线设置成20M后误差在3.75%,偏差太大了,还是用16M算了。




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4