完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 一只耳朵怪 于 2018-6-13 16:31 编辑
最近在调试28335的CAN通信,调试的过程中遇到了关于一直等待发送成功TA置位的问题: do [ ECanaShadow.CANTA.all = ECanaRegs.CANTA.all; ] while(ECanaShadow.CANTA.bit.TA25 == 0 ); // Wait for TA25 bit to be set. 这是ti提供的A to B 的工程中的等待发送成功标志置位等待,该程序的工程名虽然是A to B,但是程序中并没有对B口接收邮箱进行ID,方向等初始化,仅仅是对A口的25邮箱(不同的例子可能有些区别)进行发送初始化并且使能了发送,所以这里我的测试是将A口接到我的USB接口的CAN卡上,与PC机通信。 开始测试的时候就遇到了等待TA置位的问题,示波器打CANH和CANL两端没有波形,后来在TI的论坛上查到了原因: http://e2e.ti.com/support/microcontrollers/tms320c2000_32-bit_real-time_mcus/f/171/p/69248/250556.aspx#250556 即如果通信不成功的话,物理层上CAN通信收发芯片(板子上的CAN驱动IC)是不会给DSP返回ASK应答信号的,那么TA就不会置位。那么通信不成功有哪些原因呢?我下面列举下我知道的原因,希望对大家调CAN有所帮助,同时也欢迎大家补充。 硬件问题: 1、画板子时28335 CAN的GPIO口的定义,就是要确认画板子的时候是否将CAN口的输入和输出口给定义正确,例如有可能就会将DSP的CANRXB口接到CAN驱动IC的TX脚上去,我测试的板子就犯了这样坑爹的错误;-_-| 2、驱动IC的选择,CAN 通信需要接专门的驱动IC才能通信,而不能简单的将28335的CANTX和CANRX连接进行通信。CAN协议经过ISO标准化后有ISO11898标准(125K---1Mbps)和ISO11519-2(10K -----125Kbps)标准两种,这两种协议的物理层的规格是不一样的,其总线连接方式也是不同的,两种规格需要有专门的驱动IC与之对应。一般采用的是ISO11898协议(总线终端电阻为120欧姆),常用的IC有HA13721RPJE/PCA82C250/Si9200/CF15这几种,本次调试用的是Si9200驱动IC; 3、驱动IC的供电电压,由于DSP的GPIO输出是3.3V,所以有些板子上的CAN驱动IC供电也是3.3V,所以在这里要确定所用驱动IC在3.3V的供电电压下是否能正常工作,在网上就看见有些网友说有些驱动IC在3.3V下是不能正常工作的,这个时候设计电路时就可以考虑用磁隔离芯片将DSP和驱动IC隔离开,驱动IC用5V供电; 4、终端电阻的问题,如果你采用的是ISO11898协议的驱动芯片,则你要做通信总线上接上两个120欧姆的终端电阻; 软件问题: 1、28335 CAN的复用GPIO口的设置,这一点28335和2812的是有区别的,2812的CAN口对应的IO是固定的,而28335确实不确定的,像A口就有(GPIO30,GPIO31)和(GPIO18,GPIO19)两种选择,B口有(GPIO8,GPIO10)、(GPIO12,GPIO13)、(GPIO16、GPIO17)和(GPIO20、GPIO21)。这里IO复用CAN使能的时候就要注意了,一定和板子上的接口对应上,TI给的CAN例程中已经完整的列出这些管脚的初始化,屏蔽掉不用的管脚就是了。 2、波特率问题,通信的两个CAN口的波特率必须一致,这个是毫无疑问的。这里28335的波特率设置与2812的也有区别,除了要使能CAN的block外,还要注意CAN clock仅仅是 SYSCLKOUT的一半, 150 MHz SYSCLKOUT (75 MHz CAN clock) 。还有要注意如TSEG1必须大于或等于TSEG2等这些小问题,具体参考TI的手册或者程序。 3、邮箱的初始化,这里参考Ti的例程就OK了,这里列举一些个人觉得比较要注意的寄存器赋值: a、ECanbShadow.CANMC.bit.ABO = 1; //auto bus on b、ECanbShadow.CANBTC.bit.SAM = 1; //required if BRP is > 4 c、ECanaShadow.CANMC.bit.STM = 0; // Configure CAN for nomal mode 4、ID屏蔽的问题,这里建议刚开始调试时,如果是用CAN卡来接收,则建议不使用ID滤波,也就是使能CAN卡不论发送的数据的ID是什么,都接收;如果是DSP接收,则建议将发送和接收的邮箱ID设置成一样的,通信正常后在玩ID屏蔽的功能。 以上就是自己在调试的过程中遇到的一些会造出通信不正常的问题,有不正确的地方,希望大家能够指正。 TI提供的例子有两个:1、selftest 2、A to B 。 seltest就是TI提供的自测模式,该模式发送端口同时也是接收端口,但是该模式下接收邮箱的ID不会被发送数据的ID覆盖,因此selftest的模式下不能测试涉及ID的CAN通信协议,在selftest模式下,只要将自测模式改为正常模式,A口就可以正常的向外面发送数据了: CANMC.bit.STM = 1; // Configure CAN for selftest mode 改为 CANMC.bit.STM = 0; // Configure CAN for selftest mode A to B例程只定义了A口的25邮箱为发送邮箱并且发送数据,并没有把B邮箱定义为接收邮箱并接受数据,所以要想在28335的板子上实现A to B的can通信还要B邮箱定义为接收邮箱并接受数据。 |
|
相关推荐
2个回答
|
|
|
|
|
|
您好! 请教一下 我CAN分析仪已经接受到了数据,仍然没有置位,这是什么原因呢 ?
|
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
697 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
607 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1069 浏览 1 评论
765 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
532 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
175浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
136浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
130浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
126浏览 12评论
GD32F303RCT6配置PA4 ADC引脚,将PA2代替key功能,PA2连接时无法实现预期功能,为什么?
72浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 09:03 , Processed in 0.920570 second(s), Total 77, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号