User Tools

Site Tools


study:uds:250808-01:index

CAN Wake-Up Pattern (2025-080-08)

Local Backup

  • PDF - WUP_wake_up_concept_Prague_2015.PDF

Notes

  • 針對 Classical CAN 與 CAN-FD 所提出的可用 Wake-up Pattern:
Frame 格式 簡稱 WUP 序列 備註
Classical CAN Base Frame CBFF 1. RTR, IDE, FDF 位元皆 Dominant
2. EOF(Recessive)
3. 再次 RTR, IDE, FDF Dominant
Dominant 脈衝 ≥ 5 µs;
Recessive 脈衝 ≥ 5 µs
WUP_wake_up_concept_Pra…
Classical CAN Ext. Frame CEFF 1. RTR, IDE, FDF, r0 位元 Dominant
2. EOF(Recessive)
3. 再次 RTR, IDE, FDF, r0 Dominant
同上
CAN-FD Base Frame FBFF 1. BRS + IDE 位元 Dominant
2. EOF(Recessive)
3. 再次 BRS + IDE Dominant
bit rate ≤ 400 kb/s;
需使用短濾波時間(tFilter_short)
WUP_wake_up_concept_Pra…
CAN-FD Ext. Frame FEFF 1. RRS 或 res 位元 Dominant
2. EOF(Recessive)
3. 再次 RRS 或 res Dominant
bit rate ≤ 200 kb/s;
僅 RRS/res 可保證 Dominant
  • 註:
    • Dominant/Recessive 條件判別均依 ISO 11898-2 (ed. 2016) 中的 CAN activity filter time (long: 0.5…5 µs, short: 0.15…1.8 µs)。
    • CAN-FD 在高於上述速率時可透過設定 tFilter_short 與 tWake_long 參數來維持 WUP 機制穩定。

Refernece Code

  • 下面範例示範了如何在 PCAN-Basic for C# 中,依序送出四種 Wake-Up Pattern:
    • CBFF – Classical CAN Base Frame (Standard ID, no FD, no bitrate switch)
    • CEFF – Classical CAN Extended Frame (Extended ID, no FD, no bitrate switch)
    • FBFF – CAN-FD Base Frame (Standard ID, FD frame, bitrate switch)
    • FEFF – CAN-FD Extended Frame (Extended ID, FD frame, bitrate switch)
  • Code:
    using System;
    using Peak.Can.Basic;
    using TPCANHandle = System.Byte;         // or UInt16 depending on API wrapper
    using TPCANMsg = Peak.Can.Basic.TPCANMsg;
    using TPCANMsgFD = Peak.Can.Basic.TPCANMsgFD;
    using TPCANBaudrate = Peak.Can.Basic.TPCANBaudrate;
    using TPCANType = Peak.Can.Basic.TPCANType;
    using TPCANMessageType = Peak.Can.Basic.TPCANMessageType;
    
    class CanWakeupPatterns
    {
        const TPCANHandle Channel = TPCANHandle.PCAN_USBBUS1;
    
        static void Main()
        {
            // 1. 初始化 CAN 通道
            var status = PCANBasic.Initialize(Channel, TPCANBaudrate.PCAN_BAUD_500K, TPCANType.PCAN_TYPE_ISA);
            if (status != TPCANStatus.PCAN_ERROR_OK)
            {
                Console.WriteLine("初始化失敗: " + status);
                return;
            }
    
            // 2. 送出 CBFF (Standard frame)
            var stdMsg = new TPCANMsg
            {
                ID      = 0x100,                                       // Example standard ID
                LEN     = 0,                                           // DLC = 0
                MSGTYPE = TPCANMessageType.PCAN_MESSAGE_STANDARD      // Standard, no RTR
            };
            PCANBasic.Write(Channel, ref stdMsg);
    
            // 3. 送出 CEFF (Extended frame)
            var extMsg = new TPCANMsg
            {
                ID      = 0x1ABCDEF0,                                  // Example extended ID
                LEN     = 0,
                MSGTYPE = TPCANMessageType.PCAN_MESSAGE_EXTENDED       // Extended frame
            };
            PCANBasic.Write(Channel, ref extMsg);
    
            // 4. 送出 FBFF (FD standard frame, with bitrate switch)
            var fdStd = new TPCANMsgFD
            {
                ID      = 0x100,                                       // Example standard ID
                DLC     = 0,                                           // Length = 0
                MSGTYPE = TPCANMessageType.PCAN_MESSAGE_FD             // FD frame
                         | TPCANMessageType.PCAN_MESSAGE_STANDARD       // Standard ID
                         | TPCANMessageType.PCAN_MESSAGE_BITRATEFAST    // Enable BRS
            };
            PCANBasic.WriteFD(Channel, ref fdStd);
    
            // 5. 送出 FEFF (FD extended frame, with bitrate switch)
            var fdExt = new TPCANMsgFD
            {
                ID      = 0x1ABCDEF0,                                  // Example extended ID
                DLC     = 0,
                MSGTYPE = TPCANMessageType.PCAN_MESSAGE_FD             // FD frame
                         | TPCANMessageType.PCAN_MESSAGE_EXTENDED     // Extended ID
                         | TPCANMessageType.PCAN_MESSAGE_BITRATEFAST  // Enable BRS
            };
            PCANBasic.WriteFD(Channel, ref fdExt);
    
            // 6. 最後記得釋放通道
            PCANBasic.Uninitialize(Channel);
        }
    }
    
  • Classic CAN 用 TPCANMsg + PCANBasic.Write。
    • PCAN_MESSAGE_STANDARD ⇒ CBFF
    • PCAN_MESSAGE_EXTENDED ⇒ CEFF
  • CAN-FD 用 TPCANMsgFD + PCANBasic.WriteFD,並在 MSGTYPE 中加上:
    • PCAN_MESSAGE_FD
    • PCAN_MESSAGE_BITRATEFAST (BRS)
    • 加上 PCAN_MESSAGE_STANDARD 或 PCAN_MESSAGE_EXTENDED 以選擇 ID 格式 ⇒ 分別對應 FBFF/FEFF。
  • 把範例中的 ID 換成真正要用的識別碼,就能發出對應的 Wake-Up Pattern 了。

Reference

  • 3 person(s) visited this page until now.

study/uds/250808-01/index.txt · Last modified: 2025/08/08 08:27 by jethro