This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TCAN1145EVM:TCAN1145EVM

Guru**** 2463330 points
Other Parts Discussed in Thread: TCAN1145-Q1, USB2ANY

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1086311/tcan1145evm-tcan1145evm

部件号:TCAN1145EVM
线程中讨论的其他部件:TMS320F28.0025万CTCAN1145-Q1USB2ANY

我们将TCAN1145-Q1与TI DSP TMS320F28.0025万C一起使用。  我们希望示例代码相同。 从哪里可以获得使用SPI配置TCAN IC的示例代码?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外,还有一个问题,TCAN IC的默认模式是什么。如果默认模式是正常模式,我们是否可以直接将其用于CAN通信,而无需使用SPI进行编程?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Yogini:

    请向我发送电子邮件,请求TCAN1145的示例c驱动程序。 您可以通过单击我的姓名在我的E2E个人资料中找到我的地址。  

    此设备的默认状态为待机模式,其中CAN收发器未激活。 要评估CAN收发器,需要使用SPI将设备移至正常模式。  

    EVM还内置了一个MCU,可简化类似此类的简单配置。 您可以使用标准USB2ANY接口直接发送SPI消息,或使用以下链接在线提供的专用TCAN114x GUI,通过PC上的USB连接快速配置IC。  
    https://dev.ti.com/gallery/view/TCAN114x/TCAN114x/ver/1.0 .0/ 

    如果您对代码或GUI有疑问,请告诉我。  

    此致,
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢Eric。 我从我的电子邮件ID为C驱动程序发送了电子邮件。 同时,我也检查GUI,仅评估模式。 但当我将EVM板与Mini USB连接时,我收到以下错误。 我在这里想念Whatlese

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢Eric。 我从我的电子邮件ID为C驱动程序发送了电子邮件。 同时,我也检查GUI,仅评估模式。 但当我将EVM板与Mini USB连接时,我收到以下错误。 我在这里想念Whatlese

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Yogini:

    感谢您的支持。 我已经用演示驱动程序回复了您的电子邮件。 如果您在打开附件时遇到任何问题,请告诉我。  

    EVM上的MCU似乎未从收发器获得响应。 TCAN1145是否正确通电? 需要存在VSUP和Vio才能使SPI处于活动状态。 另外,确保EVM (S7)背面的开关已打开,以启用MCU和收发器的连接。  

    此致,
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢Eric。 我现在可以连接到GUI。 我尝试更改模式并修改寄存器。 现在,我正在测试CAN通信。 我刚刚编写了CAN数据寄存器和DLC。 我想观察CANH和CANL信号。 但如何通过TCAN在矢量设备和板载处理器之间建立CAN通信?  

    当在示波器上直接轻触CANH和CANL线时,我看不到任何信号。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Yogini:

    我很高兴听到GUI运行良好!

    TCAN1145 EVM上的MCU没有内置CAN控制器。 它仅用于通过SPI配置设备。 需要使用单独的设备在TXD和RXD线路上生成和接收CAN通信。  

    此致,
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Eric,

    现在,我尝试将TCAN连接到我的控制器TMS320F28.0025万c。 I已连接4个SPI连接和CAN Tx Rx引脚。  

    为TCAN供电,我只使用USB,与以前的连接相同。 但使用这些连接,我无法使用GUI连接到tcan。  

    我是否需要为TCAN提供外部电源,而不是使用USB为其供电? (使用外部控制器时?)

    此外,我可以从何处设置TCAN的SPI数据速率? 我无法在数据表中获取注册信息。

    在tcan init中,我只是将tcan集成电路设置为正常模式。我应该如何初始化tcan,只能通过SPI和CAN (500K波特率)进行通信?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Yogini:

    TCAN1145的SPI接口用于配置和模式控制。 这可以通过GUI进行快速评估,也可以通过MCU的SPI端口来更紧密地模拟应用程序或测试代码。 TXD和RXD引脚用于直接与CAN总线(CANH/CANL)连接的CAN数据。 由于GUI只能访问SPI引脚,因此CAN数据需要来自其他设备(MCU或信号发生器)。 我不建议尝试从GUI和外部MCU控制SPI。 SPI只能使用其中一个。  

    TCAN1145需要提供Vsup才能在任何模式下工作。 在活动模式(正常和侦听)下,也需要Vcc和Vio。 EVM上的USB只能通过J2配置为Vio提供3.3V电压。 建议使用非板载电源为EVM提供Vsup和Vcc。 如果收发器连接到MCU,Vio应与MCU的IO共享相同的电压(这就是为什么USB提供3.3V电压以与板载MCU共享)。  

    由于SPI是同步数据协议,SCLK信号为TCAN1145的SPI接口提供时钟源。 无需设置TCAN1145的SPI速率。 SPI数据速率必须在收发器的工作范围内(最大4MHz)。  

    此致,
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Eric,

    感谢您的详细说明。 这确实有助于我取得进步。

    现在,我已使用TMS320F28.0025万C将外部电源连接到TCAN EVM和SPI连接。

    我只尝试使用SPI读取TCAN的模式,如果不是正常模式,也尝试写入模式。

    但是缺少了一些东西。 我得到了意想不到的价值。 下面是我的代码。 如果缺少任何内容,请告诉我。

    要读取模式:

    uint16_t tData;
    uint8_t intRegister = 0;
    uint8_t *data;
    uint8_t address = 0x10;

    while(SPI_isBusy(SPIA_BASE));

    SPI_readDataNonBlocking(SPIA_BASE);
    SPI_writeDataBlockingNonFIFO(SPIA_BASE, (uint16_t)0x00);
    SPI_writeDataBlockingNonFIFO(SPIA_BASE, (uint16_t)(address << 1)); // 0 for read((address << 1)|0x01)

    SPI_writeDataBlockingNonFIFO(SPIA_BASE, (uint16_t)0x00); // Feed dummy zeros for read
    SPI_writeDataBlockingNonFIFO(SPIA_BASE, (uint16_t)0x00);

    while(SPI_isBusy(SPIA_BASE));
    tData = SPI_readDataNonBlocking(SPIA_BASE); // Pull first byte
    intRegister = (uint8_t)(tData & 0xFF);
    tData = SPI_readDataNonBlocking(SPIA_BASE); // Pull first byte
    *data = (uint8_t)(tData & 0xFF);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Yogini:

    我很高兴听到事情朝着正确的方向发展

    我不是直接熟悉SPI驱动程序,但从较高的层面来看,这看起来是正确的。 您正正确地在寄存器字节上移动,并在最低有效位中保留0以指示读取。 伪零可以为TCAN1145创建SCLK脉冲,以返回寄存器0x10和0x11中的数据(溢出字节将扩展到下一个寄存器)。 如果不知道您提取的数据的结果,很难评论是否成功。  

    我要提到的几件事是:确保您已配置SPI以使用正确的芯片选择和串行时钟极性。
    TCAN1145使用负极性进行芯片选择(NCS),并在NCS被拉低时激活。 NCS再次变高时,这表示SPI事务结束。NCS在每个SPI事务(读或写)之间必须变高,但对于扩展读/写命令可以保持较低。  
    TCAN1145使用SCLK的上升沿对SDI上的SPI数据进行采样,并更改SCLK下降沿上的SDO数据。 确保SPI控制器配置为使用此相同类型的逻辑,否则可能会在设备之间获取垃圾数据。  

    此致,
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下是我在写地址后仅发送一个0x00时获得的值;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外,如果我尝试使用下面的代码来突发读取3个字节,则每个数据值只得到0x54。

    //multiple register read
    while(SPI_isBusy(SPIA_BASE));

    SPI_writeDataBlockingNonFIFO(SPIA_BASE, (uint16_t)(address << 1)); // 0 for read
    while(SPI_isBusy(SPIA_BASE));
    tData = SPI_readDataBlockingNonFIFO(SPIA_BASE); // Pull first byte
    intRegister = (uint8_t)(tData & 0xFF);

    uint8_t i = 0;
    for (i=0; i < 3; i++)
    {
    SPI_writeDataBlockingNonFIFO(SPIA_BASE, 0x10); // Feed dummy zeros for read
    while(SPI_isBusy(SPIA_BASE));
    tData = SPI_readDataBlockingNonFIFO(SPIA_BASE); // Pull data byte
    datab[i] = (uint8_t)(tData & 0xFF);
    }

    while(SPI_isBusy(SPIA_BASE));

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据GUI, 以下是寄存器的预期值;

     我想读取寄存器0x10,其值应为0x01,0x04或0x07;处于睡眠,待机或正常模式。 但我只得到值= 0x54,这是寄存器0x00的值。

    我不知道代码中缺少什么。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Yogini:

    我同意,听起来收发器只看到0x00作为地址,因此返回device_ID值。 抱歉,我不熟悉SPI驱动程序,因此我认为除了在高级别调试代码之外,我对调试代码没有多大帮助。 我的建议是将示波器或逻辑分析仪连接到SCLK,SDO和SDA线路,并监控SPI帧。 这将使您能够将对应于物理SPI操作的函数调用关联起来。 这还有助于您检查并查看帧的格式是否符合TCAN1145数据表中显示的要求。  

    此致,
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Eric,  

    好消息是我现在能够建立SPI通信。

    现在,我将重点介绍CAN通信。 根据我的理解,我不必专门为TCAN做任何事情,而是将TX RX从控制器连接到TCAN控制器。正确吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Yogini:

    很高兴听到!

    正确。 所有CAN数据仅使用TXD和RXD进行传输。 需要通过SPI将收发器配置为正常模式,以便与CAN总线正确连接。  

    此致,
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Eric,

    我能够在正常模式下设置CAN通信。 感谢你的帮助。

    我几乎没有任何疑问;

    我已经浏览了数据表,但无法找到它。  

    在没有CAN总线活动时,TCAN IC从正常模式进入待机模式多长时间后?

    我在数据表中读过, tSILENCE是它的超时。它的范围从06秒到1.2 秒

    但确切的价值是什么? 是否可配置? 如果是,那么如何操作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Yogini:

    当t > tSILENCE没有CAN活动时,SWE计时器启动。 一旦SWE计时器(~4分钟)到期,收发器将自动切换至休眠模式。 默认情况下(CANSLNT_SWE_DIS = 1),任何CAN活动都将清除tSILENCE计时器并重置SWE计时器。 这意味着在收发器自动进入休眠状态之前,CAN通信需要完全间隔4分钟。 tSILENCE中断也可以通过SPI手动清除,以防止收发器再进入休眠状态~4分钟。  

    这些计时器的实际时间(0.6s - 1.2s,3.75min - 5min)不可配置。 它们由设备指定,并且提供的范围涵盖所有工作条件下的内部时钟行为。  

    此致,
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢Eric的支持。