1125293_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1125293_ja-JP

1125293_ja-JP

LPC54608 LINスレーブの基本使用共有<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

1 概要

この投稿は主にLPC54608 LINスレーブの基本的な使用法に関するもので、LPC54608 LINマスターの基本的な使用法に関する投稿と似ています。

NXP LPC54608 UARTモジュールにはすでにLINマスターとスレーブ機能があるため、この投稿では、LINアナライザーに関連付けられた簡単なスレーブコードとテスト結果を提供します。LINアナライザーをLINマスターとして使用し、LPC54608 LINスレーブとして使用すると、マスターは特定のIDフレーム(パブリッシュフレームとサブスクライブフレーム)をLINスレーブに送信し、LINスレーブ側からのフィードバックを待ちます。

2 LPC54608 LINスレーブの例

     次に、LPCXpresso54608ボードをLINスレーブとして使用します。 PCAN-USB Pro FD LINアナライザーをLINマスターとして、ハードウェア接続とLINスレーブに関する簡単なソフトウェアコードを提供します。

2.1 ハードウェア要件

ハードウェア:LPCXpresso54608TRK-KEA8PCAN-USB Pro FD(LINアナライザー)、12V DC電源

LINバス電圧は12Vですが、LPCXpresso54608ボードにはオンボードLINトランシーバーチップがないため、LINトランシーバーチップを含む外部ボードを見つける必要があります、ここではTRK-KEA8を使用します、このボードにはすでにMC33662LEF LINトランシーバー、またはLPC54608 LINマスターポストに記載されているボードKIT33662LEFEVBがあります。TRK-KEA8のMC33662LEF LINトランシーバー回路は、次のようにします。

pastedImage_2.png

図2-1。LINトランシーバーの概略図

2.1.1LPCXpresso54608 および TRK-KEA8 接続

LPCXpresso54608 UARTポートはLINトランシーバーに接続する必要があります。

No.

LPCXプレッソ54608

TRK-KEA8

注意

1

P4_RX

J10-5

UART0_RX

2

P4_TX

J10-6

UART0_TX

3

P4_GND

J14-1

GNDの

2.1.2TRK-KEA8とLINマスターアナライザーの接続

LINアナライザのLINバスはTRK-KEA8のLINバスに接続されています。

LINアナライザGNDはTRK-KEA8 GNDに接続されています。

12Vで駆動されるTRK-KEA8 P1ポート、LINマスターアナライザーのVbatピンも12Vに接続する必要があります。

TRK-KEA8 J13_2 3.3V DC電源に接続する必要がありますが、TRK-KEA8は5Vと12Vであるため、J13_2を接続するために別の3.3V電源を見つける必要があるため、ここではFRDM-KL43を3.3V電源として使用します。LINトランシーバーが3.3Vを入力し、3.3V信号をUARTポートに出力できることを確認してください。

2.1.3 物理接続

pastedImage_3.png

2.2 ソフトウェアの流れとコード

このパートでは、LINパブリッシャデータとLINマスターとスレーブ間のサブスクライバIDデータについて説明します。このコードは、SDK LPCXpresso54608 usart割り込みプロジェクトに基づいて変更されています。

2.2.1 ソフトウェアフローチャート

pastedImage_4.png

2.2.2 ソフトウェアコード

コードは SDK_2.3.0_LPCXpresso54608 に基づいて変更されますUSART割り込み、変更されたコードは次のとおりです。

void DEMO_USART_IRQHandler(void)
{
   
  if(DEMO_USART->STAT & USART_INTENSET_DELTARXBRKEN_MASK) // detect LIN break
     {
       DEMO_USART->STAT |= USART_INTENSET_DELTARXBRKEN_MASK;// clear the bit
       Lin_BKflag = 1;
       cnt = 0;
       state = RECV_SYN;
       DisableLinBreak;
      
     }
    if((kUSART_RxFifoNotEmptyFlag | kUSART_RxError) & USART_GetStatusFlags(DEMO_USART))
     {
       USART_ClearStatusFlags(DEMO_USART,kUSART_TxError | kUSART_RxError);
          rxbuff[cnt] = USART_ReadByte(DEMO_USART);;
         
         switch(state)
         {
            case RECV_SYN:
                          if(0x55 == rxbuff[cnt])
                          {
                              state = RECV_PID;
                          }
                          else
                          {
                              state = IDLE;
                              DisableLinBreak;
                          }
                          break;
            case RECV_PID:
                          if(0xAD == rxbuff[cnt])
                          {
                              state = RECV_DATA;
                          }
                          else if(0XEC == rxbuff[cnt])
                          {
                              state = SEND_DATA;
                          }
                          else
                          {
                              state = IDLE;
                              DisableLinBreak;
                          }
                          break;
            case RECV_DATA:
                          recdatacnt++;
                          if(recdatacnt >= 4) // 3 Bytes data + 1 Bytes checksum
                          {
                              recdatacnt=0;
                              state = RECV_SYN;
                              EnableLinBreak;
                          }
                          break;
         default:break;
                          
         }
         
         cnt++;
     }
  
 
    /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping
      exception return operation might vector to incorrect interrupt */
#if defined __CORTEX_M && (__CORTEX_M == 4U)
    __DSB();
#endif
}

/*!
 * @brief Main function
 */
int main(void)
{
    usart_config_t config;

    /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
    CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);

    BOARD_InitPins();
    BOARD_BootClockFROHF48M();
    BOARD_InitDebugConsole();

    /*
     * config.baudRate_Bps = 19200U;
     * config.parityMode = kUSART_ParityDisabled;
     * config.stopBitCount = kUSART_OneStopBit;
     * config.loopback = false;
     * config.enableTxFifo = false;
     * config.enableRxFifo = false;
     */
    USART_GetDefaultConfig(&config);
    config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
    config.enableTx = true;
    config.enableRx = true;

    USART_Init(DEMO_USART, &config, DEMO_USART_CLK_FREQ);

    /* Enable RX interrupt. */
    DEMO_USART->INTENSET |= USART_INTENSET_DELTARXBRKEN_MASK; //USART_INTENSET_STARTEN_MASK | 
    USART_EnableInterrupts(DEMO_USART, kUSART_RxLevelInterruptEnable | kUSART_RxErrorInterruptEnable);
    EnableIRQ(DEMO_USART_IRQn);


    while (1)
    {
  
       if(state == SEND_DATA)
       {

        while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0X01);
            break;  //just send one byte, otherwise, will send 16 bytes
        }
        while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0X02);
            break;  //just send one byte, otherwise, will send 16 bytes
        }
        while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0X10);// 0X10 correct 0Xaa wrong
            break;  //just send one byte, otherwise, will send 16 bytes            
        }
    
          recdatacnt=0;
          state = RECV_SYN;
          EnableLinBreak;
       }     
    }
}
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

3 LPC54608 LINスレーブテスト結果

  マスターは 2 つのフレームを定義します

無条件ID

保護されたID

方向

データ

チェックサム

0x2C

0XEC

加入者

0x01,0x02

0x10

0x2D

0XAD

発行者

0x01,0x02,0x03

0x4c

ここで、LINマスターは上記の2つのフレームをスレーブLINに送信し、テスト結果とLINバスからの波を提供します。

3.1 LINマスター構成

Uartボーレートは19200bps

pastedImage_5.png

3.2 0X2C,0X2Dフレームの送信

pastedImage_7.png

上記のテスト結果から、正常に送信0X2D、LIN保存側からデータを受信できる0X2C、受信したデータは0X01、0X02、チェックサムが0x10ことがわかります。

3.2.1 0X2DフレームLINバスウェーブとデバッグ結果

 

pastedImage_1.png

pastedImage_9.jpg

LINスレーブのデバッグ結果から、LINスレーブはLINマスターから正しいデータを受信でき、チェック後、チェックサムも正しいことがわかります。

3.2.20X2CフレームLINバスウェーブ

pastedImage_2.png

pastedImage_12.jpg

LINマスターツールのインターフェースから、スレーブが間違ったチェックサム0XAAを出したかどうかを見つけることができ、マスターもチェックサムが間違っていることを見つけることができます。

これは、チェックサムが間違っている LIN バス ウェーブです。

pastedImage_3.png

上記のテスト結果から、LINスレーブLPC54608見つけ、正しいLINバスデータを受信し、正しいLINデータをマスターに送り返すことができます。

LPC546xx
Tags (1)
No ratings
Version history
Last update:
‎01-05-2026 03:37 AM
Updated by: