本帖最后由 IFX_Lingling 于 2025-9-10 13:47 编辑
一、LIN协议概述
LIN(LocalInterconnect Network)是一种低成本串行通信协议,广泛应用于汽车电子(如车窗升降器、雨刷控制)及工业控制领域。其核心特点包括:
- 低成本:适用于对可靠性要求较低的场景,作为 CAN 总线的补充。
- 主从架构:单主多从通信,主节点负责调度,从节点响应指令。
- 物理层特性:单线总线(LIN Bus),逻辑电平通过收发器转换为差分信号。
二、硬件环境搭建
1:所需设备
设备名称 | | | 主控板 | | 集成 PSoC4 MCU,需外接 LIN 收发器实现总线通信。 | LIN Shield | | 提供 LIN 收发器接口,支持协议转换与信号驱动。 | 总线分析仪 | | 监控 LIN 总线通信,解析数据帧(PID、数据负载等)。 |
2.硬件连接
硬件的连接如下图:

图1:Lin环境搭建的硬件图三、如何通过LIN RX唤醒PSoC4200M深度睡眠? 方法一:通过All Port的GPIO中断去唤醒PSoC4200M:
这种方法可以针对LIN RX 的引脚上面没有专用中断向量号的设计需求(注:有专用向量号的也可以用这种方法)。
第一步:在工程中添加GlobalSignal 组件,将组件的中断配置成Combinedport interrupt (AllPortInt),将中断名字修改为“isr_CombinedPort” 图2:原理图设计 第二步:对应的代码设计:
1:配置LINRX 引脚的中断模式,在这里设置成下降沿中断。
LINS_SCB_rx_SetInterruptMode(LINS_SCB_rx_0_INTR,LINS_SCB_rx_INTR_FALLING);
2:配置GPIO中断的入口函数,在配置入口函数的API里面已经使能了中断,同时配置了中断的优先级。
uint8_t flag=0;
CY_ISR(testisr)
{
flag =0x55;
LINS_SCB_rx_ClearInterrupt();
}
isr_CombinedPort_StartEx(testisr);
3:芯片从deepsleep唤醒以后,需要把GPIO的中断关闭,这样可以保证LIN通信可以正常运行。
void LIN_Rx_Int_Disable(void)
{
isr_CombinedPort_Disable();
LINS_SCB_rx_ClearInterrupt();
}
测试结果如下图,芯片被唤醒以后收到的数据帧SignalIn为01,实际应用中需要添加一个唤醒包,第一帧数据不能保证被正确接收。

图3:测试结果
5:测试代码见附件。
方法二:可以通过修改LIN组件的方式,在组件中使能“Enable wakeup fromDeep Sleep Mode”,这种方法针对GPIO有专用的引脚向量号,没有直连中断向量的不能用这种方法。
第一步:如何修改LIN组件:
1:在 "WorkspaceExplorer "中选择"Components "选项卡。
2:右键单击项目并选择 "ImportComponent"。 图4 :导入最新版本的LIN组件 3:点击对应组件的LINxx.cysch, 勾选Enable wakeup fromDeep Sleep Mode,然后保存。
4:点击对应的组件,右击选择Set As TopComponent,然后切换到“workspaceExplorer ”中的source,进行编译。这个时候,生成的文件里面会多出SCB_rx_wake 和SCB_RX_WAKEUP_IRQ文件夹,说明修改成功了。 5:关闭工程,重新打开workspace,这个时候工程会调用本地的LIN组件。(一定要重新打开工程,这样才会调用本地的库)
6:对应的代码设计为:
LINS_SCB_Sleep();
CySysPmDeepSleep();
LINS_SCB_Wakeup();
7:测试工程见附件。
四、参考文档
1:CY8CKIT-044
2:CY8CKIT-026
3:图莫斯 |