查看: 3433|回复: 2

[求助] KEA平台LIN总线的问题

[复制链接]

该用户从未签到

2

主题

6

帖子

0

注册会员

Rank: 2

积分
96
最后登录
2024-7-24
发表于 2020-2-18 17:00:41 | 显示全部楼层 |阅读模式

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

先说下现象:主机数据场第0字节数据是0x00的时候,从机接收的数据丢失0x00,其它数据正常;主机数据场第0字节数据不是0x00的时候,从机接收的数据从数据场开始全部异常。

现在出现的问题是这样的:

1、主机发送13位显性1位隐形的间隔场、1字节同步场0x55、1字节标识符场0xF0、8字节数据场00,11,22,33,44,55,66,77,1字节校验和;从机这边能正常接收到0x55、0xF0、数据场的11,22,33,44,55,66,77,但是无法接受到00。

2、主机发送13位显性1位隐形的间隔场、1字节同步场0x55、1字节标识符场0xF0、8字节数据场42(或者其他不为0x00的数据),11,22,33,44,55,66,77,1字节校验和;从机这边能正常接收到0x55、0xF0,但是无法接收到正常的数据场数据,接收到数据类似于a8,24,9a,22,55,99,dd这种完全莫名其妙的数据。

由于我手上现在没有示波器,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. }
复制代码



最佳答案

楼主你好! 你的代码是否使用的是官方的lin驱动: http://www.nxp.com/webapp/swlice ... id=SW-LIN2X-J2602-D 如果接收数据异常,查看下波特率的配置,是否误差率在1.5%范围内。 ...
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24915
最后登录
2025-7-23
发表于 2020-3-2 10:04:07 | 显示全部楼层
楼主你好!
你的代码是否使用的是官方的lin驱动:
http://www.nxp.com/webapp/swlice ... id=SW-LIN2X-J2602-D
如果接收数据异常,查看下波特率的配置,是否误差率在1.5%范围内。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

6

帖子

0

注册会员

Rank: 2

积分
96
最后登录
2024-7-24
 楼主| 发表于 2020-3-12 11:29:19 | 显示全部楼层
结下帖子,就跟版主所说一致。主芯片频率有问题,实测keazn64主频16MHz,手册描述的数据有误。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-23 12:32 , Processed in 0.088464 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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