搜索
bottom↓
回复: 30

NXP 局域网络CAN 收发器TJA1145 应用笔记

  [复制链接]

出0入0汤圆

发表于 2017-9-28 09:46:38 | 显示全部楼层 |阅读模式
当下越来越多的车厂在应用带有局域网络功能的CAN收发器。好处就是使用特定的帧ID 或者 帧内容去唤醒某个节点,而不是总线上有数据就去唤醒节点,再去判断是不是发给自己的信息。
由于工作原因,对 NXP 的产品比较熟悉,最近有时间学习了一下使用 TJA1145 的方法,和大家分享。 各位如果有队 NXP 产品的需求可以找我。能帮忙则帮忙!

TJA1145是一款高速CAN收发器,在待机模式和睡眠模式下具有超低的功耗,通过使用选择性唤醒功能,支持符合ISO 11898-6:2013标准的CAN局部联网。
自己做了一个小的demo 板,板子上只有收发器,并把所有接口都引出。由于这个收发器是使用 SPI 去配置的,所以电脑上使用 USB==>SPI 的板子去写入和观察寄存器的状态。
测试到 CAN 功能,使用 USB转 CAN 盒子。
原理图根据应用手册上的照抄,当然,这种方式只适用于实验室级别的验证,产品级别的话, 保护器件还是要加一些的。
下面是我自己画的原理图。  基本上主要信号都放上了测试点。 LED1 是电源指示灯。  LED2 为 INH 引脚状态指示灯。


给整个板子上电, 连好 SPI 接口。
第一步先去读设备 ID。  寄存器地址为0x7E,  如果芯片为 TJA1145 则读出70H,  TJA1145FD 则是74H。

读指令的操作是地址左移一位 + 1.       也就是 7E*2 + 1   =  FD
发送指令 FD。可以看到读出来的数据如下图。

根据TJA1145 模式转换图:



在正常上电后, TJA1145 应该处于standby 模式, 对应 IHN 是 高电平输出。  对应 LED2 是点亮。
当Vcc 或  Vio 欠压时, 芯片会自动转为sleep 模式。
此处可以做一个实验,   手动让 VCC 欠压,观察芯片状态。   把 VCC 上的5V 电源断开,  再给芯片上电, 此时可以观察到, LED2 闪烁一下后熄灭, 可以知道 IHN 处于高阻状态。
芯片工作流程为 上电==>  standby 此时 led2 亮 , 由于 VCC 欠压, 进入 sleep 模式。  此时,恢复 VCC ,芯片不会自动从sleep 模式跳出。
当 VCC 有5V 供电时, 再上12V 电源,  LED2 常亮, 芯片处于 standby 模式。


当芯片处于 standby 模式时,  我们去读 0x01 这个寄存器, 模式控制寄存器。
可以读出值为04,  对应的 MC 为100,   为standby 模式。




发命令让芯片进入sleep 模式:
需要注意的是,在进入sleep 模式之前一定要清除事件和设置唤醒源。
当TJA1145切换到睡眠模式时,事件检测配置正确非常重要,以确保其响应唤醒事件。 为此,为避免潜在的系统死锁,必须启用至少一个常规唤醒事件,并且在TJA1145切换到休眠模式之前必须清除所有事件状态位。 否则,TJA1145将切换到待机模式,以响应“睡眠”命令(MC = 001)。



如果检测到VIO欠压事件,VCC(VCC / VIO <VUVD(VCC)/ VUVD(VIO))长于tdet(uv)(VCC)/ tdet(uv)(Vv),则TJA1145也将被强制切换到休眠模式。
在这种情况下,所有挂起的唤醒事件将被清除。
CAN唤醒(CWE = 1),
通过WAKE引脚(WPFE = WPRE = 1)进行本地唤醒,以避免系统死锁(见第7.11节),
禁止选择性唤醒(CPNC = 0 )。
0x03 寄存器中的FSMS指示是否通过SPI命令(FSMS = 0)选择了切换到睡眠模式,
或者由VCC或VIO(FSMS = 1)的欠压事件强制执行。
在TJA1145从sleep模式唤醒之后,该位可以被读取,以允许在欠压事件强制转换到休眠模式(FSMS = 1)时重新调整CWE,WPFE,WPRE和CPNC的设置。


下面通过写指令让芯片进入sleep 模式, 写指令= 地址*2 后面接数据(0201)。   在进入sleep 之前,根据模式转换图,需要清除事件和设置唤醒源。
先去读 event, 60H    读C1   读出为61h 中有未清除的事件。
清除PO  写入 61H     命令为 C210。




设置唤醒源,  设置本地wake pin 唤醒。   设置为1   命令为 9801 。


设置完成后,再写入 02 01  成功 设置为sleep 模式。 LED2 熄灭。

此时,只能通过本地 wake pin 去唤醒芯片。

使用导线短接一下 12V 和 KL15 引脚, 芯片被唤醒  LED2 常亮。  
唤醒后可以通过查询60H 寄存器来确定是被什么唤醒,

设置为 normal 模式, 通过 usb-CAN 工具,测试can 通信正常。
下面设置 通过 can 总线唤醒功能。

让芯片进入sleep 模式, 设置 can 总线唤醒使能, 23H 最后一位为1.
进入睡眠模式后, 通过 usb-can 给芯片发送一帧数据,  可以看到 LED2 重新点亮。
去查60H 中唤醒源,可以得到确实是由 CAN 总线唤醒。



部分网络允许响应专用的唤醒帧(WUF)选择性地激活CAN网络中的节点。 只有功能需要的节点在总线上有效,而其他节点保持低功耗模式,直到需要。
如果CAN唤醒(CWE = 1)和CAN选择性唤醒(CPNC = 1)都被使能,部分网络寄存器配置正确(PNCOK = 1),则收发器监视总线以进行专用的CAN唤醒帧。






特定帧唤醒设置:  帧ID 设置, 首先设置帧格式, 标准还是扩展 2F 寄存器
在 ID registers 0–3 里面。    标准帧或扩展帧由 这三个寄存器来决定。 标准帧11bit   扩展帧29bit  需要分开来来设定。
如设置标准帧为0x1A0 , 则需要设置 寄存器29h   为 80, 2Ah 为 06  

再去设置 ID mask 寄存器 2B 到2E 对应 0–3, 和 ID 寄存器类似的设置方法。    ID mask 中,如果哪位被设置为1, 则代表 don’t care 这一位, 我们这里把最后三位设置为1,
对应的2Dh 为 1C  2Eh 为00


设置完成后,意味着可以被唤醒的 ID 从1A0 到1A7 都可以。  
这样的设计是为了考虑如果存在多个节点, 可以通过单条消息唤醒多组节点。

ID 配置完成后,再去配置数据长度,0-8 之间。
并设置 IDE 是标准帧还是扩展帧
这里设置2Fh 为08   标准帧   不校验can 总线数据。 数据长度8bit


如果DLC 不等于 0000和所有数据屏蔽位都设置为0,则不能通过CAN总线唤醒器件。 默认情况data mask 是全1.
如果WUF包含有效的ID,但DLC(在帧控制寄存器和WUF中)不匹配,则数据字段将被忽略,并且不会唤醒任何节点。
意味着设置过数据长度后, 还会去判断每一位的数据, 如果匹配则唤醒。Table 13.
Data mask registers (addresses 68h to 6Fh)

可以通过设置 PNDM 来设置过滤。
如果位PNDM = 0,则仅评估标识符字段以确定帧是否包含有效的唤醒消息。
当PNDM = 0时,检测到有效的唤醒消息并捕获唤醒事件的条件(并且CW被设置为1):
1.接收到的唤醒帧中的标识符字段与过滤AND后的ID寄存器中的模式相匹配
2.接收帧中的CRC字段(包括隐性CRC定界符)被无错误地接收


如果PNDM = 1(默认值),则数据字段作为唤醒过滤的一部分被包括。
接收到的唤醒帧中的标识符字段与过滤AND之后的ID寄存器中的模式匹配
不是远程帧
接收到的消息中的数据长度代码与配置的数据长度代码(位DLC)匹配AND
•如果数据长度代码大于0,则设置接收帧的数据字段中至少一个位,并将关联数据掩码寄存器中的相应位也被设置
•接收帧中的CRC字段(包括隐性CRC定界符)被无错误地接收


设置总线波特率




CAN唤醒(CWE = 1)和CAN选择性唤醒(CPNC = 1)都被使能,部分网络寄存器配置正确(PNCOK = 1)







上线都是根据自己的实际操作来写的,有点乱,大家凑合看, 有问题欢迎大家一块来交流~








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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入147汤圆

发表于 2017-9-28 12:29:40 来自手机 | 显示全部楼层
这个芯片不错,我们也从开始切换到这个芯片了,硬件上需要注意下,即使不用INH脚,BAT脚也得供电,不然收发部分的电路不使能。

出0入0汤圆

发表于 2017-9-28 12:43:31 来自手机 | 显示全部楼层
到底是收发器还是CAN控制器,有点懵了

出0入0汤圆

发表于 2017-9-28 15:40:05 | 显示全部楼层
感觉是收发器带了一部分控制器的功能。。。

出0入0汤圆

发表于 2017-9-28 19:38:47 来自手机 | 显示全部楼层
与tja1050比有区别吗?

出0入4汤圆

发表于 2017-9-29 00:43:39 来自手机 | 显示全部楼层
收发器和控制器做到一起了?

出0入0汤圆

 楼主| 发表于 2017-9-29 08:42:24 | 显示全部楼层
dreampet 发表于 2017-9-28 12:29
这个芯片不错,我们也从开始切换到这个芯片了,硬件上需要注意下,即使不用INH脚,BAT脚也得供电,不然收发 ...

没错, BAT 的电一定要有, 否则不能工作。  VCC 如果欠压,芯片会进入sleep模式。

出0入0汤圆

 楼主| 发表于 2017-9-29 08:43:16 | 显示全部楼层
wurst 发表于 2017-9-28 12:43
到底是收发器还是CAN控制器,有点懵了

收发器而已,只不过是有特殊功能。可以设置被特殊的 ID  或者 特殊的报文内容唤醒。   没有控制器的功能。

出0入0汤圆

 楼主| 发表于 2017-9-29 08:44:19 | 显示全部楼层
wychao 发表于 2017-9-28 19:38
与tja1050比有区别吗?

当然有,  1050 就是个基本版的CAN 收发器, 没有低功耗模式,  这个有低功耗模式, 还可以支持被特殊的 ID, 或者特定的报文唤醒。

出0入0汤圆

 楼主| 发表于 2017-9-29 08:44:37 | 显示全部楼层
zqf441775525 发表于 2017-9-29 00:43
收发器和控制器做到一起了?

没做在一起, 这个还是一个收发器。

出0入0汤圆

发表于 2017-9-30 17:52:32 来自手机 | 显示全部楼层
想问个问题,在睡眠模式下,发送了一个CAN帧将其唤醒,那么这一帧的数据是否能读到?

出0入0汤圆

发表于 2019-5-17 16:18:24 | 显示全部楼层
楼主,帖子的图片为什么看不到了?

出0入0汤圆

发表于 2020-1-28 17:16:51 | 显示全部楼层
本帖最后由 houyu415926 于 2020-1-28 17:17 编辑

你好!TJA1145 SPI  SDI数据格式必须为float吗?从数据手册上看到的

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2020-1-30 07:54:08 | 显示全部楼层
收藏下,准备下一步使用!

出0入0汤圆

发表于 2020-1-30 15:24:52 | 显示全部楼层
收藏,感谢分享

出0入0汤圆

发表于 2020-2-8 11:01:58 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2020-3-5 17:34:28 | 显示全部楼层
暂时用不到,
多谢楼主分享

出0入0汤圆

发表于 2020-8-6 11:02:39 | 显示全部楼层
dear 楼主: 我看了您关于NXP 局域网络CAN 收发器TJA1145 应用笔记的帖子,我现在也想测下这个芯片的相关功能,您贴子上的图片无法显示出来,您能私发我一份吗?谢谢您了

出0入0汤圆

发表于 2020-8-6 12:21:00 | 显示全部楼层
IC_learner 发表于 2020-8-6 11:02
dear 楼主: 我看了您关于NXP 局域网络CAN 收发器TJA1145 应用笔记的帖子,我现在也想测下这个芯片的相关功 ...

我也想使用这个芯片  可以一块交流一下。

出0入0汤圆

发表于 2020-8-6 13:50:47 | 显示全部楼层
图片可以上传一下么

出0入0汤圆

发表于 2020-8-6 15:39:09 | 显示全部楼层
阿键学长 发表于 2020-8-6 12:21
我也想使用这个芯片  可以一块交流一下。

可以!我联系方式 q 810656514

出0入0汤圆

 楼主| 发表于 2020-8-6 16:52:09 | 显示全部楼层
阿键学长 发表于 2020-8-6 13:50
图片可以上传一下么

不知道为什么图片当时没弄好, 如果您在使用上有问题的话,就在这个帖子下留言吧, 我会看过答复的。

出0入0汤圆

 楼主| 发表于 2020-8-6 16:53:05 | 显示全部楼层
IC_learner 发表于 2020-8-6 15:39
可以!我联系方式 q 810656514

不知道为什么图片当时没弄好, 如果您在使用上有问题的话,就在这个帖子下留言吧, 我会看过答复的。

出0入0汤圆

发表于 2020-8-7 13:14:22 | 显示全部楼层
这个成本太高了吧?用带CAN的MCU加transceiver就好了。

出0入0汤圆

发表于 2020-8-11 11:22:28 | 显示全部楼层
读设备 ID,  使用SPI发送FD00  什么都读不出来,这是为什么呢,是我SPI配置的有啥问题么

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2020-8-11 14:09:05 | 显示全部楼层
STM32还好没有哪个系列的CAN有特定ID唤醒这个功能,从F1到F4

出0入0汤圆

 楼主| 发表于 2020-8-12 08:17:23 | 显示全部楼层
阿键学长 发表于 2020-8-11 11:22
读设备 ID,  使用SPI发送FD00  什么都读不出来,这是为什么呢,是我SPI配置的有啥问题么 ...

不论如何,读 ID是确认 SPI 通信正常的方法之一, 如果确认 SPI 发送波形没问题, 那么,请检查一下硬件电路。  IHN Pin 是否为 12V 左右?

出0入0汤圆

发表于 2020-8-12 14:32:19 | 显示全部楼层
aressos 发表于 2020-8-12 08:17
不论如何,读 ID是确认 SPI 通信正常的方法之一, 如果确认 SPI 发送波形没问题, 那么,请检查一下硬件 ...

能否从我上传的示波器图片上判断一下我的波形是否有问题

出0入0汤圆

发表于 2020-12-13 15:41:55 | 显示全部楼层
astankvai 发表于 2020-8-7 13:14
这个成本太高了吧?用带CAN的MCU加transceiver就好了。

您好,有推荐的transceiver么?

出0入0汤圆

发表于 2020-12-14 07:46:40 | 显示全部楼层
清风雪狼 发表于 2020-12-13 15:41
您好,有推荐的transceiver么?

tja1042之类的啊。 TI也有好多,基本在1-2之间吧。

出0入0汤圆

发表于 2021-7-6 19:56:24 | 显示全部楼层
大家对TJA1145或TJA1145A的应用配置有任何问题,欢迎和我一起交流,我的QQ:810656514
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 15:31

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

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