TJA1020 LIN Transceiver应用指南:低功耗解决方案

需积分: 10 6 下载量 105 浏览量 更新于2024-07-20 收藏 949KB PDF 举报
AN00093_TJA1020_APP_Hints.pdf 是一份由Koninklijke Philips Electronics N.V.发布的应用笔记,主要针对TJA1020 LIN (Local Interconnect Network) 串行通信收发器进行详细介绍。TJA1020是一款专为汽车和工业应用设计的低功耗LIN收发器,它支持LIN协议规范中定义的单线束信号,适用于在车辆内部的类A控制数据传输场景,这种应用环境通常包括一个主节点和一组从属节点。 这份文档的关键词集中在TJA1020 LIN Transceiver的物理层功能上,特别强调了它对于ISO 9141标准的支持。ISO 9141是与LIN协议相关的标准之一,用于诊断和接口通信,确保车辆电子系统之间的可靠连接。 应用笔记的目的是提供使用TJA1020进行LIN应用的详细指南,包括但不限于硬件配置、接口设置、数据传输流程、错误检测与处理、功耗优化以及可能遇到的问题及解决方案。文档共包含44页的内容,涵盖了从产品概述、引脚功能解释到典型电路设计示例的全面信息。 在阅读和实施TJA1020时,用户可以参考文档中的示例代码、测试案例和注意事项,以确保在实际应用中能够正确、高效地集成和运行LIN通信。此外,文档还提供了联系信息,如Philips Semiconductors的网站地址和客户服务邮箱,以便用户在遇到问题时获取进一步的技术支持。 AN00093_TJA1020_APP_Hints.pdf是一份实用的参考资料,对于任何想要在汽车电子或工业控制领域使用TJA1020 LIN收发器的工程师来说,理解和掌握其中的内容至关重要。通过这份文档,工程师能够提升对LIN协议的理解,优化系统性能,并确保满足严格的工业标准和安全要求。

void TestDelay(uint32 delay); void TestDelay(uint32 delay) { static volatile uint32 DelayTimer = 0; while (DelayTimer<delay) { DelayTimer++; } DelayTimer=0; } extern void CAN2_ORED_0_31_MB_IRQHandler(void); #if 1 // #include "Can_Ipw.h" #define MSG_ID 20u #define RX_MB_IDX 1U #define TX_MB_IDX 0U volatile int exit_code = 0; extern Flexcan_Ip_StateType Can_Ipw_xStatus0; /* User includes / uint8 dummyData[8] = {1,2,3,4,5,6,7}; /! \brief The main function for the project. \details The startup initialization sequence is the following: * - startup asm routine * - main() / //extern const Clock_Ip_ClockConfigType Clock_Ip_aClockConfig[1]; extern void CAN0_ORED_0_31_MB_IRQHandler(void); int main(void) { uint8 u8TimeOut = 100U; CanIf_bTxFlag = FALSE; CanIf_bRxFlag = FALSE; / Initialize the Mcu driver / #if (MCU_PRECOMPILE_SUPPORT == STD_ON) Mcu_Init(NULL_PTR); #elif (MCU_PRECOMPILE_SUPPORT == STD_OFF) Mcu_Init(&Mcu_Config); / Initialize the clock tree and apply PLL as system clock / Mcu_InitClock(McuClockSettingConfig_0); while ( MCU_PLL_LOCKED != Mcu_GetPllStatus() ) { / Busy wait until the System PLL is locked / } #endif / (MCU_PRECOMPILE_SUPPORT == STD_ON) / / Write your code here / Mcu_DistributePllClock(); Mcu_SetMode(McuModeSettingConf_0); / Initialize Platform driver */ Platform_Init(NULL_PTR); Port_Init(&Port_Config); Spi_Init(&Spi_Config); #if 1 // CanTrcv_TJA1145_Init(); uint8 SWK_WUF_Detection = 0u; uint8 tempRegVal = 0u; /SBC mode StandBy/ /SBC_SetMode(CANTRCV_TRCVMODE_STANDBY);/ /Disable wakepin/ Sbc_Reg_Write(CanTrcv_Tja1145_Wpe, 0x00, FALSE); /Set Lock control register/ Sbc_Reg_Write(CanTrcv_Tja1145_Lc, 0x00, FALSE); /Can baudrate config/ Sbc_Reg_Write(CanTrcv_Tja1145_Dr, CANTRCV_TJA1145_CAN_DATA_RATE, FALSE); /Set CAN control register/ Sbc_Reg_Write(CanTrcv_Tja1145_Cc, 0x31, FALSE); Sbc_Reg_Read(CanTrcv_Tja1145_Ts, &tempRegVal); Sbc_Reg_Read(CanTrcv_Tja1145_Tes, &SWK_WUF_Detection); Sbc_Reg_Write(CanTrcv_Tja1145_Mc, CanTrcv_Tja1145_Mc_MC_Normal, FALSE); Sbc_Reg_Write(CanTrcv_Tja1145_Cc,CanTrcv_Tja1145_Cc_CMC_Active,FALSE); #endif // Clock_Ip_Init(&Clock_Ip_aClockConfig[0]); volatile Flexcan_Ip_StatusType result = 1; volatile Flexcan_Ip_StatusType result1 = 1; IntCtrl_Ip_EnableIrq(FlexCAN0_1_IRQn); IntCtrl_Ip_InstallHandler(FlexCAN0_1_IRQn, CAN0_ORED_0_31_MB_IRQHandler, NULL_PTR); // Dio_WriteChannel(DioConf_DioChannel_DioChannel_O_S_STB_CAN3_M, STD_LOW);//CAN3 STB Flexcan_Ip_DataInfoType rx_info = { .msg_id_type = FLEXCAN_MSG_ID_STD, .data_length = 8u, .is_polling = TRUE, .is_remote = FALSE }; Flexcan_Ip_MsgBuffType rxData; FlexCAN_Ip_Init(CanController_0, &Can_Ipw_xStatus0, &Flexcan_aCtrlConfigPB[0U]);// while (1) { if(rx_compli==1) { FlexCAN_Ip_SetStartMode(CanController_0); FlexCAN_Ip_ConfigRxMb(CanController_0, RX_MB_IDX, &rx_info, MSG_ID); // rx_info.is_polling = FALSE; FlexCAN_Ip_Send(CanController_0, TX_MB_IDX, &rx_info, MSG_ID, (uint8 *)&dummyData); FlexCAN_Ip_Receive(CanController_0, RX_MB_IDX, &rxData, TRUE); while(FlexCAN_Ip_GetTransferStatus(CanController_0, RX_MB_IDX)

2023-06-03 上传