Teensy 4.0 / High Voltage Heater

I am wondering about changing gears and focusing on the Status signal from ID 23(40) instead of 22(24).

I found a post from another site where the user was trying to get the HVH100 Webasto (Mine are the HVH50, 50 Plus and 70) running using PCAN-LIN and it talks about the ldf (lin description file) which is also mentioned in the PDF manual.

8.5 UDS-Diagnosis
The standard LIN 2.1 Diagnosis frames (see LDF file Frame
ID 0x3C / 0x3D) will be used to map Universal Diagnosis
Services / Sub-Services and Data.

The LDF file contents that were posted on this site looks like this (V1 used Lin 2.0 and V1.5 used Lin 2.1):

Code:
/* ***********************************************************************/
/*                                                                       */
/*  LIN DESCRIPTION FILE                                                 */
/*                                                                       */
/*  Date:          16.11.2017                                            */
/*  Project:       HVH100_800                                            */
/*  Version:       V1.00.00                                              */
/*                                                                       */
/*  Network:       LIN                                                   */
/*  Slave(s):      HVH_100             Hochvolt Heizung                  */
/*  Master:        Controller          HVH_Controller                    */
/*                                                                       */
/*                                                                       */
/* ***********************************************************************/



LIN_description_file;
LIN_protocol_version = "2.0";
LIN_language_version = "2.0";
LIN_speed = 19.2 kbps;

Nodes {
  Master: Controller, 10 ms, 0.1 ms ;
  Slaves: HVH_100 ;
}

Signals {
  HVH_ErrMem_State: 2, 0, HVH_100, Controller ;
  HVH_HV_Ilock_Status: 3, 7, HVH_100, Controller ;
  HVH_HV_Voltage: 9, 510, HVH_100, Controller ;
  HVH_HV_Voltage_Offset: 4, 14, HVH_100, Controller ;
  HVH_ParameterChange: 1, 0, HVH_100, Controller ;
  KL_HV_PTC_soll: 8, 254, Controller, HVH_100 ;
  KL_PTC_ein: 1, 0, Controller, HVH_100 ;
  PTC_HV_ERR: 2, 3, HVH_100, Controller ;
  PTC_HV_Err_Heizkreis_1: 1, 0, HVH_100, Controller ;
  PTC_HV_Err_Heizkreis_2: 1, 0, HVH_100, Controller ;
  PTC_HV_Err_Heizkreis_3: 1, 0, HVH_100, Controller ;
  PTC_HV_Err_intern: 1, 0, HVH_100, Controller ;
  PTC_HV_Err_Leckagestrom: 1, 0, HVH_100, Controller ;
  PTC_HV_Err_Temperaturschutz: 1, 0, HVH_100, Controller ;
  PTC_HV_Err_Ueberstromabschaltung: 1, 0, HVH_100, Controller ;
  PTC_HV_Heizmedium_Sensor_1: 8, 254, HVH_100, Controller ;
  PTC_HV_Heizmedium_Sensor_2: 8, 254, HVH_100, Controller ;
  PTC_HV_I_ist: 8, 254, HVH_100, Controller ;
  PTC_HV_Status_PTC: 3, 7, HVH_100, Controller ;
  PTC_ResponseError: 1, 0, HVH_100, Controller ;
  PTC_Status_UBatt: 2, 3, HVH_100, Controller ;
  PTC_Temp_PCB: 8, 254, HVH_100, Controller ;
  PTC_TimeOut_Fehler: 1, 0, HVH_100, Controller ;
  PTC_UBatt: 8, 254, HVH_100, Controller ;
}

Diagnostic_signals {
  MasterReqB0: 8, 0 ;
  MasterReqB1: 8, 0 ;
  MasterReqB2: 8, 0 ;
  MasterReqB3: 8, 0 ;
  MasterReqB4: 8, 0 ;
  MasterReqB5: 8, 0 ;
  MasterReqB6: 8, 0 ;
  MasterReqB7: 8, 0 ;
  SlaveRespB0: 8, 0 ;
  SlaveRespB1: 8, 0 ;
  SlaveRespB2: 8, 0 ;
  SlaveRespB3: 8, 0 ;
  SlaveRespB4: 8, 0 ;
  SlaveRespB5: 8, 0 ;
  SlaveRespB6: 8, 0 ;
  SlaveRespB7: 8, 0 ;
}


Frames {
  HV_He_01: 28, Controller, 4 {
    KL_HV_PTC_soll, 0 ;
    KL_PTC_ein, 8 ;
  }
  HV_Hs_01: 48, HVH_100, 8 {
    PTC_HV_I_ist, 0 ;
    PTC_HV_ERR, 8 ;
    PTC_HV_Status_PTC, 16 ;
    PTC_Status_UBatt, 19 ;
    PTC_ResponseError, 21 ;
    PTC_TimeOut_Fehler, 22 ;
    PTC_HV_Err_Heizkreis_1, 24 ;
    PTC_HV_Err_Heizkreis_2, 25 ;
    PTC_HV_Err_Heizkreis_3, 26 ;
    PTC_HV_Err_Leckagestrom, 27 ;
    PTC_HV_Err_Ueberstromabschaltung, 28 ;
    PTC_HV_Err_Temperaturschutz, 29 ;
    PTC_HV_Err_intern, 30 ;
    PTC_UBatt, 32 ;
    PTC_Temp_PCB, 40 ;
    PTC_HV_Heizmedium_Sensor_1, 48 ;
    PTC_HV_Heizmedium_Sensor_2, 56 ;
  }
  HV_Hs_02: 12, HVH_100, 8 {
    HVH_HV_Voltage, 32 ;
    HVH_HV_Voltage_Offset, 41 ;
    HVH_HV_Ilock_Status, 45 ;
    HVH_ParameterChange, 61 ;
    HVH_ErrMem_State, 62 ;
  }
}



Diagnostic_frames {
  MasterReq: 0x3c {
    MasterReqB0, 0 ;
    MasterReqB1, 8 ;
    MasterReqB2, 16 ;
    MasterReqB3, 24 ;
    MasterReqB4, 32 ;
    MasterReqB5, 40 ;
    MasterReqB6, 48 ;
    MasterReqB7, 56 ;
  }
  SlaveResp: 0x3d {
    SlaveRespB0, 0 ;
    SlaveRespB1, 8 ;
    SlaveRespB2, 16 ;
    SlaveRespB3, 24 ;
    SlaveRespB4, 32 ;
    SlaveRespB5, 40 ;
    SlaveRespB6, 48 ;
    SlaveRespB7, 56 ;
  }
}

Node_attributes {
  HVH_100{
    LIN_protocol = "2.0" ;
    configured_NAD = 0x5F ;
    product_id = 0x0, 0x0, 0 ;
    response_error = PTC_ResponseError ;
    P2_min = 10 ms ;
    ST_min = 10 ms ;
    configurable_frames {
      HV_He_01 = 0x401C ;
      HV_Hs_01 = 0x4030 ;
      HV_Hs_02 = 0x400C ;
    }
  }
}

Schedule_tables {
 ST1 {
    HV_He_01 delay 20 ms ;
    HV_Hs_01 delay 20 ms ;
    HV_Hs_02 delay 20 ms ;
  }
 DiagRequest {
    MasterReq delay 10 ms ;
  }
 DiagResponse {
    SlaveResp delay 10 ms ;
  }
}


Signal_encoding_types {
 
  HVH_ErrMem_State_encoding {
    logical_value, 0, "Init" ;
    logical_value, 1, "Normalbetrieb" ;
    logical_value, 2, "WertNachEmpfangMode04Request" ;
    logical_value, 3, "WertNachInitialisierung" ;
  }
  HVH_HV_Ilock_Status_encoding {
    logical_value, 0, "Connected" ;
    logical_value, 1, "Disconnected" ;
    logical_value, 2, "Fehler" ;
    logical_value, 3, "unused" ;
    logical_value, 4, "unused" ;
    logical_value, 5, "unused" ;
    logical_value, 6, "unused" ;
    logical_value, 7, "Init" ;
  }
  HVH_HV_Voltage_encoding {
    physical_value, 0, 509, 4, 0, "Unit_Volt" ;
    logical_value, 510, "Init" ;
    logical_value, 511, "Fehler" ;
  }
  HVH_HV_Voltage_Offset_encoding {
    physical_value, 0, 8, 0.5, 0, "Unit_Volt" ;
    logical_value, 14, "Init" ;
    logical_value, 15, "Fehler" ;
  }
  HVH_ParameterChange_encoding {
    logical_value, 0, "noParameterChange" ;
    logical_value, 1, "ParameterChange" ;
  }
  KL_HV_PTC_soll_encoding {
    physical_value, 0, 100, 1, 0, "Unit_PerCent" ;
    logical_value, 254, "Init" ;
    logical_value, 255, "Fehler" ;
  }
  PTC_HV_ERR_encoding {
    logical_value, 0, "No_Error" ;
    logical_value, 1, "High_Voltage_too_low" ;
    logical_value, 2, "High_Voltage_too_high" ;
    logical_value, 3, "Init" ;
  }
  PTC_HV_Heizmedium_Sensor_1_encoding {
    physical_value, 0, 220, 1, -50, "Unit_DegreCelsi" ;
    logical_value, 254, "Init" ;
    logical_value, 255, "Fehler" ;
  }
  PTC_HV_Heizmedium_Sensor_2_encoding {
    physical_value, 0, 220, 1, -50, "Unit_DegreCelsi" ;
    logical_value, 254, "Init" ;
    logical_value, 255, "Fehler" ;
  }
  PTC_HV_I_ist_encoding {
    physical_value, 0, 253, 0.25, 0, "Unit_Amper" ;
    logical_value, 254, "Init" ;
    logical_value, 255, "Fehler" ;
  }
  PTC_HV_Status_PTC_encoding {
    logical_value, 0, "PTC_OK" ;
    logical_value, 1, "PTC_defekt" ;
    logical_value, 2, "PTC_error" ;
    logical_value, 3, "PTC_degraded_by_HW" ;
    logical_value, 4, "PTC_degraded_by_SW" ;
    logical_value, 5, "PTC_overheat_protection" ;
    logical_value, 6, "not_defined" ;
    logical_value, 7, "Init" ;
  }
  PTC_Status_UBatt_encoding {
    logical_value, 0, "Batterie_OK" ;
    logical_value, 1, "Unterspannung" ;
    logical_value, 2, "Ueberspannung" ;
    logical_value, 3, "Init" ;
  }
  PTC_Temp_PCB_encoding {
    physical_value, 0, 200, 1, -50, "Unit_DegreCelsi" ;
    logical_value, 254, "Init" ;
    logical_value, 255, "Fehler" ;
  }
  PTC_TimeOut_Fehler_encoding {
    logical_value, 0, "no_timeout" ;
    logical_value, 1, "timeout_detected" ;
  }
  PTC_UBatt_encoding {
    physical_value, 0, 253, 0.1, 0, "Unit_Volt" ;
    logical_value, 254, "Init" ;
    logical_value, 255, "Fehler" ;
  }
  SC_Aus_Ein {
    logical_value, 0, "Aus" ;
    logical_value, 1, "Ein" ;
  }
  SC_inaktiv_aktiv {
    logical_value, 0, "inaktiv" ;
    logical_value, 1, "aktiv" ;
  }
  SC_normal_Fehler {
    logical_value, 0, "normal" ;
    logical_value, 1, "Fehler" ;
  }
}

Signal_representation {
  HVH_ErrMem_State_encoding: HVH_ErrMem_State ;
  HVH_HV_Ilock_Status_encoding: HVH_HV_Ilock_Status ;
  HVH_HV_Voltage_Offset_encoding: HVH_HV_Voltage_Offset ;
  HVH_HV_Voltage_encoding: HVH_HV_Voltage ;
  HVH_ParameterChange_encoding: HVH_ParameterChange ;
  KL_HV_PTC_soll_encoding: KL_HV_PTC_soll ;
  PTC_HV_ERR_encoding: PTC_HV_ERR ;
  PTC_HV_Heizmedium_Sensor_1_encoding: PTC_HV_Heizmedium_Sensor_1 ;
  PTC_HV_Heizmedium_Sensor_2_encoding: PTC_HV_Heizmedium_Sensor_2 ;
  PTC_HV_I_ist_encoding: PTC_HV_I_ist ;
  PTC_HV_Status_PTC_encoding: PTC_HV_Status_PTC ;
  PTC_Status_UBatt_encoding: PTC_Status_UBatt ;
  PTC_Temp_PCB_encoding: PTC_Temp_PCB ;
  PTC_TimeOut_Fehler_encoding: PTC_TimeOut_Fehler ;
  PTC_UBatt_encoding: PTC_UBatt ;
  SC_Aus_Ein: KL_PTC_ein ;
  SC_inaktiv_aktiv: PTC_HV_Err_Temperaturschutz, PTC_HV_Err_Ueberstromabschaltung ;
  SC_normal_Fehler: PTC_HV_Err_Heizkreis_1, PTC_HV_Err_Heizkreis_2, PTC_HV_Err_Heizkreis_3, PTC_HV_Err_intern, PTC_HV_Err_Leckagestrom, PTC_ResponseError ;
}






Code:
<?xml version="1.0" encoding="UTF-16"?>
<!--PCAN-LIN CT profile.-->
<PCLIN_PROFILE Version="1">
    <RS-232 Group="0">
        <Baudrate>38400</Baudrate>
    </RS-232>
    <CAN Group="1">
        <Active>1</Active>
        <Baudrate>28</Baudrate>
        <Forward_Mask>134</Forward_Mask>
        <Filter_Mask>4294967295</Filter_Mask>
        <Filter_Code>0</Filter_Code>
        <ID_Offset>0</ID_Offset>
        <Error_ID>2033</Error_ID>
    </CAN>
    <LIN Group="2">
        <Active>1</Active>
        <Baudrate>19200</Baudrate>
        <Forward_Mask>133</Forward_Mask>
        <Filter_Mask>255</Filter_Mask>
        <Filter_Code>0</Filter_Code>
        <Master_Status>1</Master_Status>
        <Bus_Termination>1</Bus_Termination>
        <Retries>0</Retries>
        <Scheduler_Entries Count="3">
      <Entry Time="20">28</Entry>
      <Entry Time="20">48</Entry>
      <Entry Time="20">12</Entry>
    </Scheduler_Entries>
        <SlaveId_Data>
            <ID>63</ID>
            <Active>0</Active>
            <Length>8</Length>
            <Data>
        <Byte Index="0">255</Byte>
        <Byte Index="1">255</Byte>
        <Byte Index="2">255</Byte>
        <Byte Index="3">255</Byte>
        <Byte Index="4">255</Byte>
        <Byte Index="5">255</Byte>
        <Byte Index="6">255</Byte>
        <Byte Index="7">255</Byte>
      </Data>
        </SlaveId_Data>
        <Bit_Recognition_Status>1</Bit_Recognition_Status>
        <Slave_Activation_ID>3343336</Slave_Activation_ID>
        <Frame_Configuration>
      <Frame>
        <ID>0</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="0">255</Byte>
          <Byte Index="0">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>1</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="1">255</Byte>
          <Byte Index="1">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>2</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="2">255</Byte>
          <Byte Index="2">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>3</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="3">255</Byte>
          <Byte Index="3">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>4</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="4">255</Byte>
          <Byte Index="4">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>5</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="5">255</Byte>
          <Byte Index="5">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>6</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="6">255</Byte>
          <Byte Index="6">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>7</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="7">255</Byte>
          <Byte Index="7">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>8</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="8">255</Byte>
          <Byte Index="8">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>9</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="9">255</Byte>
          <Byte Index="9">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>10</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="10">255</Byte>
          <Byte Index="10">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>11</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="11">255</Byte>
          <Byte Index="11">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>12</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>1</Format>
        <Data>
          <Byte Index="12">255</Byte>
          <Byte Index="12">255</Byte>
          <Byte Index="12">0</Byte>
          <Byte Index="12">0</Byte>
          <Byte Index="12">0</Byte>
          <Byte Index="12">0</Byte>
          <Byte Index="12">0</Byte>
          <Byte Index="12">0</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>13</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="13">255</Byte>
          <Byte Index="13">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>14</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="14">255</Byte>
          <Byte Index="14">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>15</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="15">255</Byte>
          <Byte Index="15">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>16</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="16">255</Byte>
          <Byte Index="16">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>17</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="17">255</Byte>
          <Byte Index="17">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>18</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="18">255</Byte>
          <Byte Index="18">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>19</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="19">255</Byte>
          <Byte Index="19">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>20</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="20">255</Byte>
          <Byte Index="20">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>21</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="21">255</Byte>
          <Byte Index="21">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>22</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="22">255</Byte>
          <Byte Index="22">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>23</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="23">255</Byte>
          <Byte Index="23">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>24</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="24">255</Byte>
          <Byte Index="24">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>25</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="25">255</Byte>
          <Byte Index="25">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>26</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="26">255</Byte>
          <Byte Index="26">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>27</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="27">255</Byte>
          <Byte Index="27">255</Byte>
          <Byte Index="27">0</Byte>
          <Byte Index="27">0</Byte>
          <Byte Index="27">0</Byte>
          <Byte Index="27">0</Byte>
          <Byte Index="27">0</Byte>
          <Byte Index="27">0</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>28</ID>
        <Active>1</Active>
        <Length>4</Length>
        <Format>1</Format>
        <Data>
          <Byte Index="28">0</Byte>
          <Byte Index="28">0</Byte>
          <Byte Index="28">0</Byte>
          <Byte Index="28">0</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>29</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="29">255</Byte>
          <Byte Index="29">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>30</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="30">255</Byte>
          <Byte Index="30">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>31</ID>
        <Active>0</Active>
        <Length>2</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="31">255</Byte>
          <Byte Index="31">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>32</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="32">255</Byte>
          <Byte Index="32">255</Byte>
          <Byte Index="32">255</Byte>
          <Byte Index="32">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>33</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="33">255</Byte>
          <Byte Index="33">255</Byte>
          <Byte Index="33">255</Byte>
          <Byte Index="33">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>34</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="34">255</Byte>
          <Byte Index="34">255</Byte>
          <Byte Index="34">255</Byte>
          <Byte Index="34">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>35</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="35">255</Byte>
          <Byte Index="35">255</Byte>
          <Byte Index="35">255</Byte>
          <Byte Index="35">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>36</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="36">255</Byte>
          <Byte Index="36">255</Byte>
          <Byte Index="36">255</Byte>
          <Byte Index="36">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>37</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="37">255</Byte>
          <Byte Index="37">255</Byte>
          <Byte Index="37">255</Byte>
          <Byte Index="37">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>38</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="38">255</Byte>
          <Byte Index="38">255</Byte>
          <Byte Index="38">255</Byte>
          <Byte Index="38">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>39</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="39">255</Byte>
          <Byte Index="39">255</Byte>
          <Byte Index="39">255</Byte>
          <Byte Index="39">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>40</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="40">255</Byte>
          <Byte Index="40">255</Byte>
          <Byte Index="40">255</Byte>
          <Byte Index="40">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>41</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="41">255</Byte>
          <Byte Index="41">255</Byte>
          <Byte Index="41">255</Byte>
          <Byte Index="41">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>42</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="42">255</Byte>
          <Byte Index="42">255</Byte>
          <Byte Index="42">255</Byte>
          <Byte Index="42">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>43</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="43">255</Byte>
          <Byte Index="43">255</Byte>
          <Byte Index="43">255</Byte>
          <Byte Index="43">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>44</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="44">255</Byte>
          <Byte Index="44">255</Byte>
          <Byte Index="44">255</Byte>
          <Byte Index="44">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>45</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="45">255</Byte>
          <Byte Index="45">255</Byte>
          <Byte Index="45">255</Byte>
          <Byte Index="45">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>46</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="46">255</Byte>
          <Byte Index="46">255</Byte>
          <Byte Index="46">255</Byte>
          <Byte Index="46">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>47</ID>
        <Active>0</Active>
        <Length>4</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="47">255</Byte>
          <Byte Index="47">255</Byte>
          <Byte Index="47">255</Byte>
          <Byte Index="47">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>48</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>1</Format>
        <Data>
          <Byte Index="48">255</Byte>
          <Byte Index="48">255</Byte>
          <Byte Index="48">255</Byte>
          <Byte Index="48">255</Byte>
          <Byte Index="48">255</Byte>
          <Byte Index="48">255</Byte>
          <Byte Index="48">255</Byte>
          <Byte Index="48">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>49</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="49">255</Byte>
          <Byte Index="49">255</Byte>
          <Byte Index="49">255</Byte>
          <Byte Index="49">255</Byte>
          <Byte Index="49">255</Byte>
          <Byte Index="49">255</Byte>
          <Byte Index="49">255</Byte>
          <Byte Index="49">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>50</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="50">255</Byte>
          <Byte Index="50">255</Byte>
          <Byte Index="50">255</Byte>
          <Byte Index="50">255</Byte>
          <Byte Index="50">255</Byte>
          <Byte Index="50">255</Byte>
          <Byte Index="50">255</Byte>
          <Byte Index="50">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>51</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="51">255</Byte>
          <Byte Index="51">255</Byte>
          <Byte Index="51">255</Byte>
          <Byte Index="51">255</Byte>
          <Byte Index="51">255</Byte>
          <Byte Index="51">255</Byte>
          <Byte Index="51">255</Byte>
          <Byte Index="51">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>52</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="52">255</Byte>
          <Byte Index="52">255</Byte>
          <Byte Index="52">255</Byte>
          <Byte Index="52">255</Byte>
          <Byte Index="52">255</Byte>
          <Byte Index="52">255</Byte>
          <Byte Index="52">255</Byte>
          <Byte Index="52">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>53</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="53">255</Byte>
          <Byte Index="53">255</Byte>
          <Byte Index="53">255</Byte>
          <Byte Index="53">255</Byte>
          <Byte Index="53">255</Byte>
          <Byte Index="53">255</Byte>
          <Byte Index="53">255</Byte>
          <Byte Index="53">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>54</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="54">255</Byte>
          <Byte Index="54">255</Byte>
          <Byte Index="54">255</Byte>
          <Byte Index="54">255</Byte>
          <Byte Index="54">255</Byte>
          <Byte Index="54">255</Byte>
          <Byte Index="54">255</Byte>
          <Byte Index="54">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>55</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="55">255</Byte>
          <Byte Index="55">255</Byte>
          <Byte Index="55">255</Byte>
          <Byte Index="55">255</Byte>
          <Byte Index="55">255</Byte>
          <Byte Index="55">255</Byte>
          <Byte Index="55">255</Byte>
          <Byte Index="55">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>56</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="56">255</Byte>
          <Byte Index="56">255</Byte>
          <Byte Index="56">255</Byte>
          <Byte Index="56">255</Byte>
          <Byte Index="56">255</Byte>
          <Byte Index="56">255</Byte>
          <Byte Index="56">255</Byte>
          <Byte Index="56">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>57</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="57">255</Byte>
          <Byte Index="57">255</Byte>
          <Byte Index="57">255</Byte>
          <Byte Index="57">255</Byte>
          <Byte Index="57">255</Byte>
          <Byte Index="57">255</Byte>
          <Byte Index="57">255</Byte>
          <Byte Index="57">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>58</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="58">255</Byte>
          <Byte Index="58">255</Byte>
          <Byte Index="58">255</Byte>
          <Byte Index="58">255</Byte>
          <Byte Index="58">255</Byte>
          <Byte Index="58">255</Byte>
          <Byte Index="58">255</Byte>
          <Byte Index="58">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>59</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>1</Format>
        <Data>
          <Byte Index="59">0</Byte>
          <Byte Index="59">0</Byte>
          <Byte Index="59">255</Byte>
          <Byte Index="59">255</Byte>
          <Byte Index="59">255</Byte>
          <Byte Index="59">255</Byte>
          <Byte Index="59">255</Byte>
          <Byte Index="59">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>60</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="60">255</Byte>
          <Byte Index="60">255</Byte>
          <Byte Index="60">255</Byte>
          <Byte Index="60">255</Byte>
          <Byte Index="60">255</Byte>
          <Byte Index="60">255</Byte>
          <Byte Index="60">255</Byte>
          <Byte Index="60">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>61</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="61">255</Byte>
          <Byte Index="61">255</Byte>
          <Byte Index="61">255</Byte>
          <Byte Index="61">255</Byte>
          <Byte Index="61">255</Byte>
          <Byte Index="61">255</Byte>
          <Byte Index="61">255</Byte>
          <Byte Index="61">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>62</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="62">255</Byte>
          <Byte Index="62">255</Byte>
          <Byte Index="62">255</Byte>
          <Byte Index="62">255</Byte>
          <Byte Index="62">255</Byte>
          <Byte Index="62">255</Byte>
          <Byte Index="62">255</Byte>
          <Byte Index="62">255</Byte>
        </Data>
      </Frame>
      <Frame>
        <ID>63</ID>
        <Active>0</Active>
        <Length>8</Length>
        <Format>0</Format>
        <Data>
          <Byte Index="63">255</Byte>
          <Byte Index="63">255</Byte>
          <Byte Index="63">255</Byte>
          <Byte Index="63">255</Byte>
          <Byte Index="63">255</Byte>
          <Byte Index="63">255</Byte>
          <Byte Index="63">255</Byte>
          <Byte Index="63">255</Byte>
        </Data>
      </Frame>
    </Frame_Configuration>
    </LIN>
</PCLIN_PROFILE>

In this post, he mentions subscriber frames at IDs 12 and 48.

send subscriber frames on LIN by using rtr CAN messages (while scheduler is off):

0x30 len 8 rtr
0x0C len 8 rtr

BTW: wondering why your heater doesn´t respond on ID 0x0C as listed in the ldf

I think we need to hit up more IDs for testing, but I will try these and will see about running a brute force on the rest of them.
 
Last edited:
If you have a suggestion to have it Order on 1 for every response ID then 2 for every response ID, I would be appreciative.
Using 2 "for" loops, makes it happen:
C++:
#include "lin_bus.h"

// Create an IntervalTimer object
IntervalTimer myTimer;

int ledState = LOW;               // ledState used to set the LED
unsigned long interval = 200000;  // interval at which to blinkLED to run every 0.2 seconds

LIN lin;

int lin_cs = 32;  // pin 23 for my LIN board
int led1 = 23;
int lin_fault = 28;

uint8_t linTXdata[4] = { 1, 85, 0, 8 };  // 40W, 45C, heater on
uint8_t linRXdata[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
uint8_t CRC = 0;
uint8_t orderID = 0;
uint8_t responseID = 0;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(lin_fault, INPUT);
  pinMode(lin_cs, OUTPUT);
  digitalWrite(lin_cs, HIGH);  // enable MCP2004 LIN transceiver
  digitalWrite(LED_BUILTIN, HIGH);

  Serial.begin(115200);

  //lin.begin(&Serial3, 19200);  // or
  lin.begin(&Serial3, 9600);
  delay(1000);
  pinMode(led1, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
  for (orderID = 0; orderID < 64; orderID++) {
    for (responseID = 0; responseID < 64; responseID++) {

      lin.order(orderID, linTXdata, 4, lin2x);
      delay(100);

      CRC = lin.response(responseID, linRXdata, 8, lin2x);
      Serial.print(orderID, HEX);
      Serial.print("\t");
      Serial.print(responseID, HEX);
      Serial.print("\t");
      Serial.println(CRC, HEX);
      delay(100);
    }
  }
}

By the way, LIN bus ID's are 6-bit, so only need to count from 0 to 63 [0x00 to 0x3F].

1708846804264.png


Paul
 
The LDF file contents that were posted on this site looks like this (V1 used Lin 2.0 and V1.5 used Lin 2.1):
I read about LDF files but couldn't find them on the web. Conveniently, someone posted them!
Need to study these 2 files. Found a very useful document a while ago.

Paul
 
Something finally happened! On the Volvo heater, at 9600 baud, all FF all the time!!! At 19200, suddenly getting a 0 response at Hex 27 on every ID ordered, Every one (0 through 63). Strange readings on the scope.



1708873810093.png
 

Attachments

  • 1708875150173.png
    1708875150173.png
    1.7 MB · Views: 55
  • 1708875170479.png
    1708875170479.png
    1.7 MB · Views: 51
  • 1708875189842.png
    1708875189842.png
    1.7 MB · Views: 61
  • 1708875205443.png
    1708875205443.png
    1.7 MB · Views: 102
  • 1708875223194.png
    1708875223194.png
    1.7 MB · Views: 95
Last edited:
Something finally happened! On the Volvo heater, at 9600 baud, all FF all the time!!! At 19200, suddenly getting a 0 response at Hex 27 on every ID ordered, Every one (0 through 63). Strange readings on the scope.
Great! Although I'm a bit concerned because of the CRC returned being 0.
Well, let's see what the response actually returns.
Modified the code to read out only ID 0x27. I left the lin.order() in just to be sure. But you could comment that out to see whether it makes a difference.
C++:
#include "lin_bus.h"

// Create an IntervalTimer object
IntervalTimer myTimer;

int ledState = LOW;               // ledState used to set the LED
unsigned long interval = 200000;  // interval at which to blinkLED to run every 0.2 seconds

LIN lin;

int lin_cs = 32;  // pin 23 for my LIN board
int led1 = 23;
int lin_fault = 28;

uint8_t linTXdata[4] = { 1, 85, 0, 8 };  // 40W, 45C, heater on
uint8_t linRXdata[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
uint8_t CRC = 0;
uint8_t orderID = 0x00;
uint8_t responseID = 0x27;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(lin_fault, INPUT);
  pinMode(lin_cs, OUTPUT);
  digitalWrite(lin_cs, HIGH);  // enable MCP2004 LIN transceiver
  digitalWrite(LED_BUILTIN, HIGH);

  Serial.begin(115200);

  lin.begin(&Serial3, 19200);
  delay(1000);
  pinMode(led1, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
  lin.order(orderID, linTXdata, 4, lin2x);  // perhaps not needed?
  delay(100);
  CRC = lin.response(responseID, linRXdata, 8, lin2x);
  Serial.println(CRC, HEX);
  for (int i = 0; i < 8; i++) {  // display the raw data
    Serial.print(linRXdata[i], HEX);
    Serial.print("\t");
  }
  Serial.println();
  delay(100);
}

I'm not sure what to think about the scope pictures though. It looks like the scope is not able to decode the data correctly for whatever reason.

Paul
 
Here is the response withe new code you sent:

1708883081291.png
 

Attachments

  • 1708883178259.png
    1708883178259.png
    1.9 MB · Views: 64
  • 1708883198534.png
    1708883198534.png
    1.8 MB · Views: 78
Last edited:
With Lin.Order commented out: I see variance in E3 E4 and D4 and 3C and 3B

1708883760861.png
 

Attachments

  • 1708883855655.png
    1708883855655.png
    1.6 MB · Views: 102
  • 1708884156290.png
    1708884156290.png
    1.7 MB · Views: 87
Last edited:
Could you zoom-in on one of those bursts such that I can see the edges of the bits? I have a feeling that it is 9600 baud. Did you set the scope to 19200 baud when doing these measurements?

Paul
 
Last edited:
I reset the scope. Check out these readings. Hopefully more of what you were looking for:
 

Attachments

  • 1708885105436.png
    1708885105436.png
    1.7 MB · Views: 58
  • 1708885119007.png
    1708885119007.png
    1.7 MB · Views: 94
Last edited:
OK.
Can you now zoom-in so that I can see the whole frame screen-wide? You have turn the time-base ["horizontal"] knob.
 
I think the data is not correctly decoded on the scope. You should never see ID 0x3C with my latest code.
Did you set the level in the Decode > Signal menu to around 6V?
SDS00008.png
 
I have to turn horizontal to the left to get data to show up.
 

Attachments

  • 1708887207803.png
    1708887207803.png
    1.7 MB · Views: 66
Last edited:
Can you turn the horizontal knob clockwise to zoom-in on one frame? Like I did in my screenshot above.
Can you also set the trigger to "trailing edge"? [it's called "Slope Falling" in the Trigger Setup menu]. And set the "trigger level" to around 6V?
 
got the slope falling and zoomed in. Turned Trigger knob to increase to 6V.
 

Attachments

  • 1708888235210.png
    1708888235210.png
    1.7 MB · Views: 92
Last edited:
Weird, I see ID 0X3D on your scope. Did you change this line in your code: uint8_t responseID = 0x27;.
BTW, you can zoom in by turning the horizontal knob clockwise and then you use the horizontal "position" knob to shift the image to the left.
 
The standard LIN 2.1 Diagnosis frames (see LDF file Frame
ID 0x3C / 0x3D) will be used to map Universal Diagnosis
Services / Sub-Services and Data.

Since we are taking any lin.response, isn't it possible that the 0x3C and 0x3D are giving us status messages?
 
Since we are taking any lin.response, isn't it possible that the 0x3C and 0x3D are giving us status messages?
Hmm, interesting. Although I'm under the impression that you need to issue a lin.response command to ID 0x3C/0x3D to get a message back?
Did you also see a lin.response frame from ID 0x27? My code sends it every 100ms, so should be visible as well.

PS: I'm going off-the-air now for the rest of the night.
 
I am not sure about a response from 0x27 but will look. Thanks for the time and have a nice evening. I will play around some more, but glad there is some communication I suppose . . .

Here is one more frame I caught.

1708890006136.png
 
I converted back from Hex to Decimal to make it easier for me and when writing to all IDs but letting the response go through ID 39, I see that the data comes through as follows:


Code:
0                           
0    62    0    124    61    80    0    207
0                           
0                           
0    62    0    123    61    80    0    208
1                           
0                           
0    62    0    123    61    80    0    208
2                           
0                           
0    62    0    123    61    80    0    208
3                           
0                           
0    62    0    123    61    80    0    208
4                           
0                           
0    62    0    123    61    80    0    208
5                           
0                           
0    62    0    124    61    80    0    207
6                           
0                           
0    62    0    124    61    80    0    207
7                           
0                           
0    62    0    123    61    80    0    208
8                           
0                           
0    62    0    124    61    80    0    207
9                           
0                           
0    62    0    123    61    80    0    208
10                           
0                           
0    62    0    123    61    80    0    208
11                           
0                           
0    62    0    123    61    80    0    208
12                           
0                           
0    62    0    124    61    80    0    207
13                           
0                           
0    62    0    124    61    80    0    207
14                           
0                           
0    62    0    123    61    80    0    208
15                           
0                           
0    62    0    124    61    80    0    207
16                           
0                           
0    62    0    123    61    80    0    208
17                           
0                           
0    62    0    123    61    80    0    208
18                           
0                           
0    62    0    124    61    80    0    207
19                           
0                           
0    62    0    123    61    80    0    208
20                           
0                           
0    62    0    124    61    80    0    207
21                           
0                           
0    62    0    123    61    80    0    208
22                           
0                           
0    62    0    124    61    80    0    207
23                           
0                           
0    62    0    123    61    208    0    80
24                           
0                           
0    62    0    123    61    80    0    208
25                           
0                           
0    62    0    123    61    80    0    208
26                           
0                           
0    62    0    124    61    80    0    207
27                           
0                           
0    62    0    123    61    80    0    208
28                           
0                           
0    62    0    123    61    80    0    208
29                           
0                           
0    62    0    124    61    80    0    207
30                           
0                           
0    62    0    123    61    80    0    208
31                           
0                           
0    62    0    123    61    80    0    208
32                           
0                           
0    62    0    124    61    80    0    207
33                           
0                           
0    62    0    124    61    80    0    207
34                           
0                           
0    62    0    123    61    80    0    208
35                           
0                           
0    62    0    123    61    80    0    208
36                           
0                           
0    62    0    123    61    80    0    208
37                           
0                           
0    62    0    123    61    80    0    208
38                           
0                           
0    62    0    123    61    80    0    208
39                           
0                           
0    62    0    124    61    208    0    79
40                           
0                           
0    62    0    123    61    80    0    208
41                           
0                           
0    62    0    123    61    80    0    208
42                           
0                           
0    62    0    123    61    80    0    208
43                           
0                           
0    62    0    123    61    80    0    208
44                           
0                           
0    62    0    123    61    80    0    208
45                           
0                           
0    62    0    123    61    80    0    208
46                           
0                           
0    62    0    124    61    80    0    207
47                           
0                           
0    62    0    124    61    80    0    207
48                           
0                           
0    62    0    123    61    80    0    208
49                           
0                           
0    62    0    123    61    80    0    208
50                           
0                           
0    62    0    123    61    80    0    208
51                           
0                           
0    62    0    123    61    80    0    208
52                           
0                           
0    62    0    123    61    80    0    208
53                           
0                           
0    62    0    124    61    80    0    207
54                           
0                           
0    62    0    123    61    80    0    208
55                           
0                           
0    62    0    123    61    80    0    208
56                           
0                           
0    62    0    123    61    80    0    208
57                           
0                           
0    62    0    124    61    80    0    207
58                           
0                           
0    62    0    123    61    80    0    208
59                           
0                           
0    62    0    123    61    80    0    208
60                           
0                           
0    62    0    124    61    208    0    79
61                           
0                           
0    62    0    123    61    80    0    208
62                           
0                           
0    62    0    123    61    80    0    208
63                           
0                           
0    62    0    123    61    80    0    208


I let it repeat several times. The only thing that stands out to me is that for ID 23, 39 and 60, bytes 6 and 8 are reversed. Not sure what that means, if anything.
 
Back
Top