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.

TMS570LC4357: LIN master与slave通信

Part Number: TMS570LC4357
Other Parts Discussed in Thread: HALCOGEN,

本人想要测试lin的master和slave之间的通信:

lin1配置为master,lin2配置为slave,其余配置相同,lin1的tx与lin2的rx对接,lin1的rx与lin2的tx对接,在lin2接受到ID后,lin2发送数据作为responce,请问这样是否可以测试master与slave之间的通信?若不能应该怎样进行连线测试该模式?

  • 你好,我认为这样连线是可以的。

  • f感谢回复!

    但是这样连接后,由master发送帧头,slave产生id中断后,发送数据做为帧头的应答,slave的FLG reg的BE、NRE,TIMEOUT置位,且lin1的rx端没有接受到数据。这个是什么原因导致的呢?

  • 你的程序有参考这个例程吗?

    C:\ti\Hercules\HALCoGen\v04.07.01\examples\TMS570LC43x

    可以确定软件上的配置是没问题的吗?

    由master发送帧头,slave产生id中断后,发送数据做为帧头的应答,

    你是说master发送的slave可以,slave发送到master不行是吗?

  • 例程里面是自发自收的例子,例程功能测试正常;

    初始化代码:

    void linInit(void)
    {
    linREG1->GCR0 = 1U;
    linREG1->GCR1 = 0U;
    linREG1->GCR1 = 0x40U;

    linREG1->GCR1|= 0x03000C40U
    | (uint32)((uint32)1U << 12U)
    | (uint32)((uint32)0U << 2U)
    | (uint32)((uint32)1U << 5U);  //master mode

    linREG1->MBRSR = (uint32)3370U;
    linREG1->BRS = (uint32)233U;
    linREG1->MASK = ((uint32)((uint32)0xFFU << 16U) | (uint32)0xFFU);
    linREG1->COMP = ((uint32)((uint32)(1U - 1U) << 8U) | ((uint32)13U - 13U));
    linREG1->FORMAT = ((linREG1->FORMAT & 0xFFF8FFFFU) | (uint32)(((uint32)4U - 1U) << 16U));


    linREG1->PIO0 = ((uint32)4U | (uint32)2U | (uint32)0U);
    linREG1->PIO3 = ((uint32)4U | (uint32)0U | (uint32)0U);
    linREG1->PIO1 = ((uint32)0U | (uint32)0U | (uint32)0U);
    linREG1->PIO6 = ((uint32)0U | (uint32)0U | (uint32)0U);
    linREG1->PIO7 = ((uint32)0U | (uint32)0U | (uint32)0U);
    linREG1->PIO8 = ((uint32)4U | (uint32)2U | (uint32)1U);


    linREG1->SETINTLVL = ((uint32)0x00000000U;
    linREG1->SETINT = (uint32)0x00000200U;
    linREG1->GCR1 |= 0x00000080U;


    linREG2->GCR0 = 1U;
    linREG2->GCR1 = 0U;
    linREG2->GCR1 = 0x40U;

    linREG2->GCR1 |= 0x03000C40U
    | (uint32)((uint32)1U << 12U)
    | (uint32)((uint32)0U << 2U)
    | (uint32)((uint32)0U << 5U);  //salve mode

    linREG2->MBRSR = (uint32)3370U;
    linREG2->BRS = (uint32)233U;
    linREG2->MASK = ((uint32)((uint32)0xFFU << 16U) | (uint32)0xFFU);
    linREG2->COMP = ((uint32)((uint32)(1U - 1U) << 8U) | ((uint32)13U - 13U));
    linREG2->FORMAT = ((linREG2->FORMAT & 0xFFF8FFFFU) | (uint32)(((uint32)8U - 1U) << 16U));


    linREG2->PIO0 = ((uint32)4U | (uint32)2U | (uint32)0U);
    linREG2->PIO3 = ((uint32)0U | (uint32)0U | (uint32)0U);
    linREG2->PIO1 = ((uint32)0U | (uint32)0U | (uint32)0U);
    linREG2->PIO6 = ((uint32)0U | (uint32)0U | (uint32)0U);
    linREG2->PIO7 = ((uint32)0U | (uint32)0U | (uint32)0U);
    linREG2->PIO8 = ((uint32)4U | (uint32)2U | (uint32)1U);


    linREG2->SETINTLVL = ((uint32)0x00000000U;
    linREG2->SETINT = ((uint32)0x00002000U;   // enable id int & rev IDint 
    linREG2->GCR1 |= 0x00000080U;
    }

    测试代码

    linInit();
    while((!(linIsTxReady(linREG1))) || (linREG1->FLR & 0x8U == 0x8U));
    linSendHeader(linREG1,0x3);  //  master send frame header 

    salve接受到ID后,在中断函数中发送数据:

    master发送的ID,slave 可以接受到,但是slave端数据发送不出去,示波器抓slave TX端,无数据波形输出;

    master自回环和自发自收测试通过。

    现在有一个疑问是:该开发板是否已经集成了收发器? 若无收发器,该测试方式肯定是有问题的。若需要收发器,应该适配那个型号的 收发器呢?

  • slave是否能自发自收?你的master和slave板子的具体型号是什么?是TI官方板还是自制板?

  • 开发版是tms570lc4357 官方板,测试过两个官方开发板对接,也测试过一个开发板的lin1和lin2 对接,分别测试master和slave端,自发自收都正常 。

  • 好的,感谢