2016MicrochipTechnologyInc.
DS00002059A_CN第1页AN2059简介LIN(局域互联网)是一种低成本串行通信协议,常见于汽车网络中.
它通常用于汽车的机电节点,但也非常适合工业应用.
对LIN通信不熟悉的用户经常受LIN协议复杂晦涩的高层开销所困扰(如LDF、NCF文件等).
而事实上,它的目标却是通过极为基本的LIN消息传输来简单而快速地评估LINMCU和LINPHY硬件.
为了协助进行快速原型开发,建立了配套的MCCLIN代码发生器.
当您的LIN应用准备投入生产的时候,我们的LIN设计和第三方合作伙伴提供可定制且经过生产验证的LIN协议栈和支持.
本应用笔记的第一部分包含LIN基础知识,解释其工作原理.
强烈建议读者熟悉LIN规范v2.
2A(本文发布时的最新版本规范).
第二部分介绍一个LIN协议示例,使用MicrochipMPLAB代码配置器(MPLABCodeConfigurator,MCC)LIN协议栈库.
本文提供有关如何在数分钟内生成LIN主机和从机驱动程序的操作步骤.
MCCLIN协议栈特性MCC可为下列基本LIN功能生成代码:通过组合EUART字节构建LIN消息帧自动生成带有用户定义帧名称的LINPID根据LIN消息帧配置生成LIN经典校验和值生成显示如何使用LINAPI的调度程序示例代码仅支持无条件类型帧允许用户定义帧名称允许用户定义数据长度(1至8个字节)可配置低至1毫秒的超时和周期支持硬件中断LIN基础知识以下章节概述LIN基础知识,有助于读者更好地理解MCCLIN协议栈的实现.
LIN网络配置LIN集群由单线式总线、一个主机节点和最多15个从机节点组成.
典型网络连接如图1所示.
主机控制总线活动,从机根据安排的任务发送或接收信息.
作者:MaryTamarTan、BrianBailey、HanLinMicrochipTechnologyInc.
注:MCCLIN协议栈仅用于介绍LIN基础知识和原型开发.
它只有较低的LIN层级,以便支持大部分基本的LIN消息传输.
参考"LIN协议栈"部分,了解更多限制的详细信息.
LIN基础知识和8位PIC单片机上实现的MCCLIN协议栈库AN2059DS00002059A_CN第2页2016MicrochipTechnologyInc.
图1:LIN网络配置MCCLIN协议栈是本应用笔记关注的核心内容,它能提供物理接口与高级应用固件之间的接口.
EUSART模块是LIN通信中的关键要素.
它用作LIN的串行引擎,使硬件(而非软件)拥有串行控制.
通过这种方式可以在数据发送或接收期间进行杂项处理.
收发器用作EUSART模块和总线之间的双向半双工通信物理接口.
有关LIN物理层的更多信息,请参见"电气连接".
电气连接LIN总线工作电压范围为9V至18V.
一般而言,单片机的LINI/O引脚电压电平通过一个收发器调节至LIN总线电平.
这样可以让单片机在5V电平下工作,同时总线的工作电平更高.
Microchip提供各种LIN收发器产品组合,某些产品内置了额外的特性,比如内部稳压器(VREG)和窗口看门狗定时器(WWDT).
MCP202XALIN收发器的示例框图如图2所示.
MasterTXRXTransceiverLINBusEUSARTLINProtocolDriverHigherLevelApplicationsSlave1TXRXTransceiverEUSARTLINProtocolDriverHigherLevelApplicationsSlave1TXRXTransceiverEUSARTLINProtocolDriverHigherLevelApplications2016MicrochipTechnologyInc.
DS00002059A_CN第3页AN2059图2:LIN收发器MCP202XA框图有关Microchip提供的LIN收发器完整列表,请参见:www.
microchip.
com/lin.
总线的每个节点都端接至VBAT.
主机应当通过1k电阻端接,而从机应当通过30k电阻端接.
如图2所示,MCP202XALIN收发器已经集成了一个内部30k端接电阻,因此从机无需外部端接.
最大总线长度设计为40米.
图3显示了一个LIN物理连接示例.
参见《MCP202XA数据手册》(DS22298A_CN)中的"典型应用电路",网址:www.
microchip.
com/MCP2021A.
图3:LIN物理层Wake-UpLogicandPowerControlThermalandShortCircuitProtectionBusDominantTimerBusWake-UpRatiometricReferenceVoltageRegulatorThermalProtectionShortCircuitProtectionSlopeControl~30kΩVSSLBUSVBBRESET(MCP202Aonly)VREGVREGRXDCS/LWAKETXDFAULT/TXEVREGInternalCircuits4.
2VSlave1Slave1MasterVBAT30K1K30K30KLINBusGND…MASTERTASKSLAVETASKSLAVETASKSLAVETASKAN2059DS00002059A_CN第4页2016MicrochipTechnologyInc.
帧和信号帧定义为LIN总线上传输的实体.
一帧可以分为两部分:帧头和帧响应.
每一个串行数据字节都始于开始(Start)位(显性信号),止于停止(Stop)位(隐性信号).
当信号逻辑为0时,称为显性信号.
当信号逻辑为1时,称为隐性信号.
图4:帧结构帧头始终由主机发送,包括间隔字段(BreakField)、同步字段(SyncField)和保护标识符(ProtectedIdentifier,PID)字段.
间隔字段由至少13位时间长度的显性信号后接间隔定界符组成.
间隔定界符至少是1位时间长度的隐性信号.
随后是一个同步字段,数据值为0x55.
间隔字段时序可让从机识别新帧的开始.
同步字段允许从机与主机时钟同步.
PID字段由6个帧标识符位和2个奇偶校验位组成.
帧ID表示唯一的消息地址,但不一定决定消息的特定目的地.
MCCLIN协议栈包含自动计算帧ID奇偶校验的算法.
帧响应可以来自主机本身,也可以来自任意从机.
仅具有相匹配ID的节点才会发送响应.
响应包括数据字段(DataField)和校验和字段(ChecksumField).
数据字段由信号组成.
信号可以是标量值,也可以是字节数组.
标量信号搭载1位至16位数值.
字节数组信号搭载1字节至8字节数值.
帧标识符相同的所有帧中,信号始终出现在数据字段的相同位置.
虽然订阅者数量没有限制,但也应当由单个发布者发送.
这些信号用于较高级的应用中.
帧始终由校验和字段结尾.
MCCLIN协议栈采用仅对数据字节执行的经典校验和计算.
字节间距离等于从上一个字段停止位结束,到下一个字节开始位之间的时间.
响应距离等于头与响应字段之间的时间.
最后,帧间距离等于帧结束与下一帧开始之间的时间.
LIN总线时序LIN总线上的发送和接收都是确定性和周期性的.
能达到这个要求是因为使用了调度表.
调度表列出了需要以预定义时间间隔出现在总线上的所有帧.
这可以防止总线过载,同时还能确保每一帧都正确发送和接收.
图5显示了一个帧传输示例,具有不同的响应发布者.
这些打包在帧内的信号的订阅者可以是连接总线的任意节点.
BreakFieldSYNCFieldPIDFieldDataField1DataField8ChecksumFieldResponseSpaceInter-byteSpaceHeaderResponseFrameInter-frameSpace2016MicrochipTechnologyInc.
DS00002059A_CN第5页AN2059图5:LIN总线上的帧LIN中使用的最小时间单位称为时基.
它控制调度表中的帧时序.
单帧的时隙周期为时基的整数倍.
任何时序源都能生成时基,比如PIC单片机的Timer0、Timer1/3/5或Timer2/4/6外设.
目前,MCCLIN协议栈的时基设定为1ms.
至此,本文讨论了LIN协议的基础知识,在后续章节中本文将指导用户使用MCCLIN工具完成配置,并生成主机和从机LIN演示应用程序.
MCCLIN协议栈库MPLAB代码配置器(MCC)是MPLABX集成开发环境下的软件插件.
它采用图形用户界面(GraphicalUserInterface,GUI),是生成各种PICMCU外设驱动程序的便捷工具.
除了外设模块,它还提供不同协议栈和接口的库.
这些库中有用于主机和从机节点的LIN协议栈.
MCCLIN协议栈系统要求MPLABXIDEV3.
10或更高版本MPLAB代码配置器(MCC)v3或更高版本JavaJREv1.
8或更高版本(参考MCC版本说明,针对最新版本的Java设置MPLABX)优势和局限MCCLIN协议栈的优势和局限如下所示.
优势:实现了片内EUSART和定时器模块,可让程序在后台运行.
这同样也减少了固件.
可选EUSART模块(针对具有多个EUSART的器件)和时序源(比如Timer1和Timer2/4/6).
可方便地创建调度表.
自动处理发送或接收帧,可方便地供应用程序使用.
局限:不在数据字段中定义信号名称.
例如,一个帧也许有两个数据字节,包含两位窗口状态信号、六位门状态信号和八位温度状态信号.
用户必须进一步在代码中定义这些信号名称,以便解析这两个字节的数据.
但MCCLIN发生器确实定义了帧PID的名称.
因此,出于原型开发的考虑,用户可能会使用帧名称来协助识别每帧搭载的内容.
不支持完整LIN协议.
仅实现了基本的低层级LIN帧传输.
MCCLIN协议栈PID分配列于主机和从机表中每一帧的名称都分配了唯一的PID.
PID由六个帧标识符位(LSB)和两个奇偶校验位(MSB)组成.
MCCLIN协议栈自动将帧标识符数值分配给LIN表中列出的帧.
帧标识符分配首先将"0"分配至表中最上面的帧,之后每一行的帧都递增1,以此类推.
奇偶校验位P0和P1由协议栈自动计算.
另外,附录A:"帧PID查找表"中还提供了ID至PID查找表.
当用户使用Microchip的测试工具(比如LIN串行分析仪)时,此表很有用.
用户可以根据帧ID找到对应的PID值,以便发送帧.
MasterTaskSlaveTaskMasterSlaveTaskASlaveTaskBSlaveTaskCHeaderResponseHeaderResponseHeaderResponseHeaderResponseHeaderResponseHeaderResponseHeaderResponseHeaderResponseLINBusFrameSlot1FrameSlot2FrameSlot3FrameSlot4ResponseSpaceInter-frameSpace注:应当仅列出60帧(0至59)以便符合LIN规范中对于搭载信号(数据)帧的规定.
保留帧标识符60至63,用于其它特殊功能.
AN2059DS00002059A_CN第6页2016MicrochipTechnologyInc.
相关外设除LIN协议栈库外,还需配置两个外设模块.
它们是EUSART模块(用于帧的发送与接收)和定时器模块(用于LIN总线时基).
EUSART模块8位PIC单片机的增强型通用同步/异步接收器/发送器(EUSART)模块是一个串行通信外设,包含独立于器件程序执行、进行输入或输出串行数据传输时所需的全部时钟发生器、移位寄存器和数据缓冲器.
除了基本USART特性外,此模块还具有某些使其成为LIN总线系统理想之选的能力:自动检测并校准波特率收到间隔(Break)时唤醒可发送13位间隔字符为了符合LIN标准,应当配置每一个字符传输,以使一个开始位之后有一个或最多八个数据字节,并始终以停止位终止.
开始位始终为"0",而停止位始终为"1".
各位保持不变的时间为1/(波特率).
EUSART模块的波特率发生器可以根据系统振荡器频率自动推导出波特率.
EUSART首先发送和接收LSB.
此外,使能EUSART中断还可让LIN应用程序在后台运行,同时单片机执行其它重要任务.
这样MCU可以执行其它应用程序,改善时间和功耗性能.
TIMER2模块从可用的定时器模块中选择时序源.
例如,Timer1是一个16位定时器,当没有预分频器且生成溢出中断时,它可在每一个指令周期中递增.
而Timer2是一个8位定时器,它在定时器与周期寄存器匹配时生成中断.
时序源的选择取决于可用的模块和特定应用程序要求.
所选定时器周期应当始终设为1ms.
该1ms时基用来控制调度表中每一个消息帧的时序.
有关如何配置LIN库的操作步骤说明以及相关外设请阅读后续章节.
MCCLIN协议栈演示本应用笔记内的演示程序使用MCC3.
0.
有关如何下载并安装最新版本MCC的详细信息,请参见www.
microchip.
com/mcc.
LIN主机和LIN从机协议栈的演示硬件采用PICkit28引脚LIN演示板(部件编号:DM164130-3)和LIN串行分析仪(部件编号:APGDT001).
图6显示了一个简化设置.
图6:LIN演示设置图7显示了演示应用程序中PICkit28引脚LIN演示板的一部分.
LINSerialAnalyzerUserInterfaceProgram9VPowerSupply(AC002014)(APGDT001)LINbusGNDVBATPICkit28-pinLINDemoBoard(DM1641303)2016MicrochipTechnologyInc.
DS00002059A_CN第7页AN2059图7:LIN演示原理图LIN主机协议栈图8显示了主机节点配置表.
每一行代表一个单独的帧.
每一行显示的内容都是默认值.
用户可以手动编辑内容,并可通过增加行的方式来增加更多帧.
代码中的调度表将根据输入该表中的参数生成.
表中的列定义如下:图8:默认LIN主机表信号本列中,用户提供帧ID的描述性名称.
最上面的名称(帧)将自动分配ID0.
MCCLIN协议栈可自动将ID转换为PID.
例如,它将ID0转换为PID0x80.
随着添加更多的帧,会分配递增ID.
调度器代码会从顶部第一行开始发送帧,直到底部最后一行.
类型帧可以是发送类型的,也可以是接收类型的.
将帧配置为发送类型表示该帧的数据来自主机.
换言之,头之后将发送主机自身的响应.
将帧配置为接收类型表示该帧的数据来自从机.
换言之,主机送出头后,该主机便预期收到来自从机节点的响应.
长度长度等于数据字段的字节数,数值范围为1至8.
超时超时是从帧头结束到节点应当完成发送响应的预期时间之间的间隔,单位为毫秒(ms).
如果某个节点完成响应所花的时间比预期的超时时间更长,则主机停止发送当前帧,转而发送下一帧.
确保超时时间至少大于响应距离加上帧的响应.
否则会不断跳过当前帧,就好像该帧不起作用一样.
周期周期是当前帧开始到下一帧开始之间的时间间隔,单位为毫秒(ms).
周期应当大于其发送当前帧所需的时间.
这样可以有更多的帧间时间,以便让节点在准备接收下一帧之前处理上一帧.
PIC16F1718RC4TXRXRC3VSSVSSR9R10R11R12100Ω100Ω100Ω100ΩVDDVCCR810kΩCS/WAKETXRXFAULT/TXELBUSRB5R1410kΩVDDC710FVBBVBATR810kΩD21N4004D11N4148C10220pFD31N475027VMCP2021C810FRA0SW2C20.
1FRP110kΩ(1)(1)(2)APGLINSerialAnalyzerVBATLINbusGND注1:仅在LIN主机演示中实现.
2:仅在LIN从机演示中实现.
信号类型长度超时周期UNLOCK发送10100RSSI发送1020LFRX接收81000注:该表中的信号以和PID相关的帧名称来指代.
这与LIN规范中定义的"信号"有所不同.
在LIN规范中,信号以数据字段中的位和字节的名称来指代,而非PID.
AN2059DS00002059A_CN第8页2016MicrochipTechnologyInc.
LIN主机协议栈的实现本节描述了LIN主机库的简单应用程序.
在PICkit28引脚LIN演示板上安装PIC16F1718单片机并配置为主机,与配置为从机的LIN串行分析仪通信.
正确的硬件设置请参见"MCCLIN协议栈演示".
在下列演示示例中,仅在调度表GUI上输入两个无条件帧.
第一个帧是发送类型的,包含1字节数据.
主机将发送PID值等于0x80(ID=0)的帧.
数据从主机节点自身出发,向LIN集群上的订阅者发送关于主机节点板载开关S2的状态.
当数据等于0x00时,按下S2.
当数据等于0x01时,未按下S2.
第二个帧是接收类型的,包含1字节数据.
主机将发送PID值等于0xC1(ID=0x01)的帧.
PID匹配的节点将只发送固定数据值为0x15的响应.
图9显示了一个简化的演示流程图.
图9:主机演示流程图MCC配置下列内容将指导用户设置LIN帧、所需的外设(系统、定时器和EUSART)以及使能LIN收发器所需的I/O.
另请参考"主机演示的MCCGUI设置"中的屏幕截图.
1.
如需启动MCCv3,请前往Tools>Embedded>MPLABCodeConfiguratorv3(工具>已安装工具>MPLAB代码配置器V3).
2.
在ProjectResources(项目资源)下,单击System(系统),然后选择SystemModule(系统模块).
3.
选择所需的系统时钟设置.
对于示例应用程序,选择InternalOscillator(INTOSC)mode:I/OfunctionontheCLKpin(内部振荡器(INTOSC)模式:CLK引脚充当I/O功能),该选项在OscillatorSelect(振荡器选择)菜单中.
"SystemClock(系统时钟)"选择FOSC,"InternalClock(内部时钟)"选择16MHz_HF.
取消勾选PLLEnabled(使能PLL).
参见图10.
4.
禁用看门狗定时器.
5.
在DeviceResources(器件资源)下,选择Libraries>LIN>LINMaster(库>LIN>LIN主机).
6.
将出现图8中所示的LIN主机表GUI.
7.
如需增加一帧,可点击Add(添加).
"Signal-Type-Length-Timeout-Period"(信号-类型-长度-超时-周期)栏以下将另外出现一行.
8.
编辑字段,如图11所示.
各列的定义参见"LIN主机协议栈".
9.
选择Timer2作为定时器.
由于PIC16F1718仅有一个EUSART,因此EUSART选项卡上将只有一个选项.
10.
单击Notifications(通知)选项卡.
该选项卡列出了使LIN协议栈具有全部功能所需的所有额外配置.
记录"HINT"类通知,因为生成MCC设置后将会用到该通知.
11.
其中一个通知描述了LIN模块使用Timer2.
因此,应当配置Timer2.
如需配置,请前往DeviceResources>Peripherals>Timer>TMR2(器件资源>外设>定时器>TMR2).
12.
勾选EnableTimer(使能定时器)和EnableTimerInterrupt(允许定时器中断).
13.
TimerPeriod(定时器周期)设为1ms.
使用高频系统时钟时,预分频器和后分频器之比可能需要进行调节.
14.
另一条消息说明LIN模块使用EUSART.
因此,EUSART模块需要进行配置.
如需配置,请前往DeviceResources>Peripherals>EUSART>EUSART.
15.
在MCCEUSARTGUI中,将模式设置为"异步".
勾选EnableEUSART(使能EUSART)、EnableTransmit(使能发送)和EnableEUSARTInterrupts(允许EUSART中断).
将Transmission(发送)位和Reception(接收)位设为8位,将ClockPolarity(时钟极性)设为Non-Inverted(非反相).
InitializeLINMasterTransmitHeader(PID=0x80)ReadBackS2PressedTransmitResponse(Data=0x00)TransmitResponse(Data=0x01)TransmitHeader(PID=0x&)ReadBackReceiveResponse(Data=0x15)NoYes2016MicrochipTechnologyInc.
DS00002059A_CN第9页AN205916.
设置波特率.
波特率的数值范围为1至20000.
对于示例应用程序,使用9600波特率.
17.
在MCC窗口右下角的"TableView"中设置相应的EUSARTTX和RX引脚.
本例中,RC6和RC7分别分配至TX和RX引脚.
18.
完成Timer2和EUSART模块设置后,配置I/O端口,使能已连接的LIN收发器(MCP2021).
注意,不同的收发器可能需要进行不同设置.
请参考具体收发器数据手册.
对于28引脚LIN演示板而言,收发器的CS/WAKE和FAULT/TXE引脚分别连接RC4和RC3引脚.
CS/WAKE应当配置为输出并设为高电平,而FAULT/TXE应当设为输入且弱上拉使能.
19.
其它外设现可根据特定应用程序进行配置.
对于示例应用程序而言,仅使用连接至RB5的外部开关.
它配置为数字输入引脚.
引脚模块GUI如图15所示.
20.
单击Generate(生成).
首次生成MCC代码时,会弹出一个窗口,要求将配置设置保存为.
mc3文件格式.
输入所需文件名,单击Save.
配置设置总结请参见"主机演示的MCCGUI设置".
21.
配置设置已生成.
但配置过程尚未完成.
"HINT"类通知"AddLIN_handler()inthemain.
cwhileloop"应在生成的代码中实现.
22.
取消INTERRUPT_GlobalInterruptEn-able()和INTERRUPT_PeripheralInter-ruptEnable()的注释(main.
c中).
23.
LIN主机驱动程序至此完成设置.
对于示例应用程序,main.
c的while(1)循环如例1所示.
例1:主机演示代码片段主机演示的MCCGUI设置下图显示了MCCLIN协议栈主机演示中实现的不同外设模块设置,采用MCCComposerArea视图.
图10:系统模块设置while(1){//加入您的应用程序代码LIN_handler();if(PORTBbits.
RB5==HIGH){Master_Switch_Data[0]=0x01;}else{Master_Switch_Data[0]=0x00;}}AN2059DS00002059A_CN第10页2016MicrochipTechnologyInc.
图11:LIN主机设置图12:LIN主机通知2016MicrochipTechnologyInc.
DS00002059A_CN第11页AN2059图13:关联模块设置–EUSARTAN2059DS00002059A_CN第12页2016MicrochipTechnologyInc.
图14:关联模块设置–TMR2图15:关联模块设置–引脚模块从机设置LIN串行分析仪的设置如图16所示.
本应用笔记不会详述LIN串行分析仪的实现.
更多信息,请参见www.
microchip.
com.
2016MicrochipTechnologyInc.
DS00002059A_CN第13页AN2059图16:LIN串行分析仪设置主机演示结果图17和图18分别显示主机演示应用程序的串行分析仪以及逻辑分析仪读数.
当按下S2时(RB5低电平),主机发送0x00.
相反,当未按下S2时(RB5高电平),主机发送0x01.
图17:主机演示的LIN串行分析仪显示SwitchisPressedSwitchisNotPressedAN2059DS00002059A_CN第14页2016MicrochipTechnologyInc.
图18:主机演示的逻辑分析仪显示LIN从机协议栈默认从机节点如图19所示.
与主机表不同,从机表仅包含三列,分别是信号、类型和长度.
图19:默认LIN从机表Master_SwitchFrame(SwitchNotPressed:Data=0x01)Master_SwitchFrame(SwitchPressed:Data=0x00)Serial_AnalyzerFrame(SlaveResponseData=0x15)CommunicationMatrix信号类型长度UNLOCK接收1RSSI接收1LFRX发送82016MicrochipTechnologyInc.
DS00002059A_CN第15页AN2059信号如果MCCLIN主机协议栈部署在连接该从机的同一个总线上,则主机表列出的全部帧也应当以和LIN从机表一致的顺序输入.
这是因为在MCCLIN协议栈中部署了PID分配系统.
使用不同的主机可能不需要这样操作,但用户应当记录给定帧的特定PID(见"MCCLIN协议栈PID分配").
类型将帧配置为发送类型意味着从机将在接收到主机发送的带有匹配PID的表头之后发送响应.
将帧配置为接收类型意味着从机是相应帧(PID)数据字段中数据的订阅者.
长度长度等于帧数据字段的字节数.
对于相应的帧PID而言,主机节点或从机节点的长度应当一致.
例如,如果PID0x80帧的长度为两个数据字节,那么从机也应如此.
LIN从机协议栈的实现本节给出了一个使用LIN串行分析仪作为主机以及安装了PIC16F1718单片机的PICkit28引脚LIN演示板作为从机的示例应用程序.
本演示采用板载电位计RP1和PIC16F1718片上模数转换器(ADC)模块.
硬件设置请参见"MCCLIN协议栈演示".
从机演示的简化流程图见图20.
从机仅在接收到0xC1的PID时才会发送响应.
它将发送一个数据字节,其值等于电位计输入中ADC读数的八个LSb.
图20:从机演示流程图MCC配置如需配置MCCLIN从机驱动程序,请执行下列步骤:1.
如需启动MCCv3,请前往Tools>Embedded>MPLABCodeConfiguratorv3.
2.
在"ProjectResources"下,单击System,然后选择SystemModule.
3.
选择所需的系统时钟设置.
对于示例应用程序,选择InternalOscillator(INTOSC)mode:I/OfunctionontheCLKpin(内部振荡器(INTOSC)模式:CLK引脚充当I/O功能),该选项在OscillatorSelect菜单中.
"SystemClock"选择FOSC,"InternalClock"选择16MHz_HF.
取消勾选PLLEnabled.
参见图10.
4.
禁用看门狗定时器.
5.
在"DeviceResources"下,选择Libraries>LIN>LINSlave.
6.
将出现图19中所示的LIN从机表GUI.
7.
若要增加一帧,单击EasySetup标签页,然后单击Add.
"Signal-Type-Length"以下将另外出现一行.
8.
编辑字段,如图21所示.
各列的定义参见"LIN从机协议栈".
9.
选择Timer2作为定时器.
由于PIC16F1718仅有一个EUSART,因此EUSART选项卡上将只有一个选项.
注:在LIN集群中,一个主机帧可以有多个订阅者(接收器或监听器).
然而,在特定时间内针对帧头只能有一次响应(只能有一个发布者).
例如,如果主机将帧ID0配置为发送类型,那么多个从机节点可以有相同的帧ID0作为接收类型.
在另一个示例中,如果主机将帧ID0配置为接收类型,那么只允许将一个从机节点配置为发送类型以响应帧ID0.
InitializeLINSlavePID=0xC1TransmitResponse(Data=ADRESL)NoYesReceiveHeaderADCofRP1ChannelAN2059DS00002059A_CN第16页2016MicrochipTechnologyInc.
10.
单击Notifications选项卡.
该选项卡列出了使LIN协议栈具有全部功能所需的所有额外配置.
记录"HINT"类通知,因为生成MCC设置后将会用到该通知.
11.
其中一个通知描述了LIN模块使用Timer2.
因此,应当配置Timer2.
如需配置,请前往DeviceResources>Peripherals>Timer>TMR2.
12.
勾选EnableTimer和EnableTimerInterrupt.
13.
TimerPeriod设为1ms.
使用高频系统时钟时,预分频器和后分频器之比可能需要进行调节.
14.
另一条消息说明LIN模块使用EUSART.
因此,EUSART模块需要进行配置.
如需配置,请前往DeviceResources>Peripherals>EUSART>EUSART.
15.
在MCCEUSARTGUI中,将模式设置为"异步".
勾选EnableEUSART、EnableTransmit、EnableContinuousReceive(使能连续接收)和EnableEUSARTInterrupts.
将Transmission位和Reception位设为8位,将ClockPolarity设为Non-Inverted.
16.
设置波特率.
波特率的数值范围为1至20000.
对于示例应用程序,使用9600波特率.
17.
在MCC窗口右下角的"TableView"中设置相应的EUSARTTX和RX引脚.
本例中,RC6和RC7分别分配至TX和RX引脚.
18.
完成Timer2和EUSART模块设置后,配置I/O端口,使能已连接的LIN收发器(MCP2021).
注意,不同的收发器可能需要进行不同设置.
请参考具体收发器数据手册.
对于28引脚LIN演示板而言,收发器的CS/WAKE和FAULT/TXE引脚分别连接RC4和RC3.
CS/WAKE应当配置为输出并设为高电平,而FAULT/TXE应当设为输入且弱上拉使能.
引脚模块GUI如图25所示.
19.
其它外设现可根据特定应用程序进行配置.
示例应用程序使用模拟输入;因此,必须设置ADC模块.
20.
如需配置ADC,请前往DeviceResources>Peripherals>ADC>ADC.
在"TableView"中,选择RA0作为ADC输入引脚.
之后AN0将自动添加至"ComposerArea(编辑区域)"的"SelectedChannels(选定通道)"列表中.
使用"RP1"作为此通道的自定义名称.
图24详细解释了完整的ADC设置.
21.
单击Generate.
首次生成MCC代码时,会弹出一个窗口,要求将配置设置保存为.
mc3文件格式.
输入所需文件名,单击Save.
配置设置总结请参见"从机演示中的MCCGUI设置".
22.
配置设置已生成.
但配置过程尚未完成.
"HINT"类通知"AddLIN_handler()inthemain.
cwhileloop"应在生成的代码中实现.
23.
取消INTERRUPT_GlobalInterruptEn-able()和INTERRUPT_PeripheralInter-ruptEnable()的注释(main.
c中).
24.
LIN从机驱动程序至此完成设置.
对于示例应用程序而言,lin_app.
c中应当包含.
.
/adc.
h,并且processLIN()应当按照例2所示修改.
例2:从机演示代码片段voidprocessLIN(void){uint8_ttempRxData[8];uint8_tcmd;cmd=LIN_getPacket(tempRxData);switch(cmd){caseSerial_Analyzer:break;caseSlave_Pot:Slave_Pot_Data[0]=ADC_GetConversion(RP1);break;default:break;}2016MicrochipTechnologyInc.
DS00002059A_CN第17页AN2059从机演示中的MCCGUI设置下图显示了MCCLIN协议栈从机演示中实现的不同外设模块设置,采用MCCComposerArea视图.
图21:LIN从机设置图22:LIN从机通知注:系统模块和TMR2设置与图10和图14中的相同.
AN2059DS00002059A_CN第18页2016MicrochipTechnologyInc.
图23:关联模块设置–EUSART图24:关联模块设置–ADC2016MicrochipTechnologyInc.
DS00002059A_CN第19页AN2059图25:关联模块设置–引脚模块从机演示结果图26和图27分别显示了从机演示的串行分析仪以及逻辑分析仪读数.
主机周期性发送十六进制值为0x07的数据,而从机在每一次主机广播0xC1PID时以来自电位计输入端ADC读数的八位LSb作为响应.
图26:从机演示的LIN串行分析仪显示AN2059DS00002059A_CN第20页2016MicrochipTechnologyInc.
图27:从机演示的逻辑分析仪显示结论本应用笔记演示说明如何使用Microchip的MPLAB代码配置器(MCC)快速完成LIN相关嵌入式应用的原型开发.
LIN代码针对主机和从机节点生成,用户学习如何配置I/O、EUSART、ADC和系统时钟等外设.
此外还说明了LIN的实际传输,让用户对该协议有基本的了解.
接下来应当深入了解LIN规范,进入生产阶段.
再次强调,MCCLIN协议栈仅供原型开发使用,不支持完整的LIN规范.
如需完整的汽车或生产驱动程序,设计人员应咨询Microchip设计部门或第三方合作伙伴,比如IHR.
参考文献1.
LINSpecificationPackageRevision2.
2A.
Slave_PotFrame(Data=ADRESL)Serial_AnalyzerFrame(MasterTransmitData=0x07)CommunicationMatrix2016MicrochipTechnologyInc.
DS00002059A_CN第21页AN2059附录A:帧PID查找表表A-1:搭载信号的帧PID查找表P1P0ID[5…0]PIDPID字段PIDPIDPID(ID1ID3ID4ID5)ID0ID2ID3ID4十进制十六进制十进制十六进制1000x001280x801110x011930xC10120x02660x420030x0330x031140x041960xC41150x051330x850060x0660x060070x07710x470080x0880x080090x09730x4911100x0A2020xCA11110x0B1390x8B00120x0C760x4C00130x0D130x0D11140x0E1420x8E11150x0F2070xCF00160x10800x5000170x11170x1111180x121460x9211190x132110xD300200x14200x1400210x15850x5511220x162140xD611230x171510x9711240x182160xD811250x191530x9900260x1A260x1A00270x1B910x5B11280x1C1560x9C11290x1D2210xDD00300x1E940x5E00310x1F310x1F00320x20320x2000330x21970x6111340x222260xE211350x231630xA300360x241000x64AN2059DS00002059A_CN第22页2016MicrochipTechnologyInc.
00370x25370x2510380x261660xA611390x272310xE710400x281680xA811410x292330xE901420x2A1060x6A00430x2B430x2B11440x2C2360xEC10450x2D1730xAD00460x2E460x2E01470x2F1110x6F11480x302400xF010490x311770xB101500x32500x3201510x331150x7311520x341800xB410530x352450xF501540x361180x7600550x37550x3701560x381200x7800570x39570x3910580x3A1860xBA11590x3B2510xFB表A-1:搭载信号的帧PID查找表(续)P1P0ID[5…0]PIDPID字段PIDPIDPID(ID1ID3ID4ID5)ID0ID2ID3ID4十进制十六进制十进制十六进制2016MicrochipTechnologyInc.
DS00002059A_CN第23页提供本文档的中文版本仅为了便于理解.
请勿忽视文档中包含的英文部分,因为其中提供了有关Microchip产品性能和使用情况的有用信息.
MicrochipTechnologyInc.
及其分公司和相关公司、各级主管与员工及事务代理机构对译文中可能存在的任何差错不承担任何责任.
建议参考MicrochipTechnologyInc.
的英文原版文档.
本出版物中所述的器件应用信息及其他类似内容仅为您提供便利,它们可能由更新之信息所替代.
确保应用符合技术规范,是您自身应负的责任.
Microchip对这些信息不作任何明示或暗示、书面或口头、法定或其他形式的声明或担保,包括但不限于针对其使用情况、质量、性能、适销性或特定用途的适用性的声明或担保.
Microchip对因这些信息及使用这些信息而引起的后果不承担任何责任.
如果将Microchip器件用于生命维持和/或生命安全应用,一切风险由买方自负.
买方同意在由此引发任何一切伤害、索赔、诉讼或费用时,会维护和保障Microchip免于承担法律责任,并加以赔偿.
除非另外声明,在Microchip知识产权保护下,不得暗中或以其他方式转让任何许可证.
商标Microchip的名称和徽标组合、Microchip徽标、AnyRate、dsPIC、FlashFlex、flexPWR、Heldo、JukeBlox、KeeLoq、KeeLoq徽标、Kleer、LANCheck、LINKMD、MediaLB、MOST、MOST徽标、MPLAB、OptoLyzer、PIC、PICSTART、PIC32徽标、RightTouch、SpyNIC、SST、SST徽标、SuperFlash及UNI/O均为MicrochipTechnologyInc.
在美国和其他国家或地区的注册商标.
ClockWorks、TheEmbeddedControlSolutionsCompany、ETHERSYNCH、HyperSpeedControl、HyperLightLoad、IntelliMOS、mTouch、PrecisionEdge和QUIET-WIRE均为MicrochipTechnologyInc.
在美国的注册商标.
Analog-for-the-DigitalAge、AnyCapacitor、AnyIn、AnyOut、BodyCom、chipKIT、chipKIT徽标、CodeGuard、dsPICDEM、dsPICDEM.
net、DynamicAverageMatching、DAM、ECAN、EtherGREEN、In-CircuitSerialProgramming、ICSP、Inter-ChipConnectivity、JitterBlocker、KleerNet、KleerNet徽标、MiWi、motorBench、MPASM、MPF、MPLABCertified徽标、MPLIB、MPLINK、MultiTRAK、NetDetach、OmniscientCodeGeneration、PICDEM、PICDEM.
net、PICkit、PICtail、PureSilicon、RightTouch徽标、REALICE、RippleBlocker、SerialQuadI/O、SQI、SuperSwitcher、SuperSwitcherII、TotalEndurance、TSHARC、USBCheck、VariSense、ViewSpan、WiperLock、WirelessDNA和ZENA均为MicrochipTechnologyInc.
在美国和其他国家或地区的商标.
SQTP为MicrochipTechnologyInc.
在美国的服务标记.
SiliconStorageTechnology为MicrochipTechnologyInc.
在除美国外的国家或地区的注册商标.
GestIC为MicrochipTechnologyInc.
的子公司MicrochipTechnologyGermanyIIGmbH&Co.
&KG在除美国外的国家或地区的注册商标.
在此提及的所有其他商标均为各持有公司所有.
2016,MicrochipTechnologyInc.
版权所有.
ISBN:978-1-5224-0823-9请注意以下有关Microchip器件代码保护功能的要点:Microchip的产品均达到Microchip数据手册中所述的技术指标.
Microchip确信:在正常使用的情况下,Microchip系列产品是当今市场上同类产品中最安全的产品之一.
目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为.
就我们所知,所有这些行为都不是以Microchip数据手册中规定的操作规范来使用Microchip产品的.
这样做的人极可能侵犯了知识产权.
Microchip愿与那些注重代码完整性的客户合作.
Microchip或任何其他半导体厂商均无法保证其代码的安全性.
代码保护并不意味着我们保证产品是"牢不可破"的.
代码保护功能处于持续发展中.
Microchip承诺将不断改进产品的代码保护功能.
任何试图破坏Microchip代码保护功能的行为均可视为违反了《数字器件千年版权法案(DigitalMillenniumCopyrightAct)》.
如果这种行为导致他人在未经授权的情况下,能访问您的软件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为.
对于如今的云服务商的竞争着实很激烈,我们可以看到国内国外服务商的各种内卷,使得我们很多个人服务商压力还是比较大的。我们看到这几年的服务商变动还是比较大的,很多新服务商坚持不超过三个月,有的是多个品牌同步进行然后分别的跑路赚一波走人。对于我们用户来说,便宜的服务商固然可以试试,但是如果是不确定的,建议月付或者主力业务尽量的还是注意备份。HostYun 最近几个月还是比较活跃的,在前面也有多次介绍到商...
今天有网友提到自己在Linux服务器中安装VNC桌面的时候安装都没有问题,但是在登录远程的时候居然有出现灰色界面,有三行代码提示"Accept clipboard from viewers,Send clipboard to viewers,Send primary selection to viewers"。即便我们重新登录也不行,这个到底如何解决呢?这里找几个可以解决的可能办法,我们多多尝试。...
raksmart作为一家老牌美国机房总是被很多人问到raksmart香港服务器怎么样、raksmart好不好?其实,这也好理解。香港服务器离大陆最近、理论上是不需要备案的服务器里面速度最快的,被过多关注也就在情理之中了。本着为大家趟雷就是本站的光荣这一理念,拿了一台raksmart的香港独立服务器,简单做个测评,分享下实测的数据,仅供参考!官方网站:https://www.raksmart.com...