当前的和
A
U
T
O
S
A
R
,
A
u
t
o
m
o
t
i
v
e
O
p
e
n
S
y
s
t
e
m
A
r
c
h
i
t
e
c
t
u
r
e
AUTOSAR,Automotive\quad Open\quad System\quad Architecture
AUTOSAR,AutomotiveOpenSystemArchitecture这个组织的标准兼容的时间基准同步方法是使用软件的方式实现的,
C
i
A
,
C
A
N
i
n
A
u
t
o
m
a
t
i
o
n
CiA,CAN\quad in\quad Automation
CiA,CANinAutomation这个组织规定了一种和
A
U
T
O
S
A
R
AUTOSAR
AUTOSAR这个组织的标准兼容的时间基准同步的硬件方法,因为硬件的方法可以获得更高的精度,软件的方法由于网络延迟,软件响应时间以及噪声的影响往往精度较低。这里的时间基同步方法无论是硬件实现还是软件实现都依赖于时间戳。需要注意的是这里的时间戳不是
11898
−
4
11898-4
11898−4标准规定的
T
T
C
A
N
TTCAN
TTCAN里面的时间戳,这里的时间基准的同步和
11898
−
4
11898-4
11898−4标准是不一样的两种东西。
C
i
A
CiA
CiA这个组织的这里规定目前表现在
C
i
A
603
CiA\quad 603
CiA603文档中,目前这个文档对于不是这个组织的成员是收费的,具体可以见这里:CiA 603介绍。
我们先讲一下
A
U
T
O
S
A
R
AUTOSAR
AUTOSAR这个组织的标准规定的时间基准同步的流程。参考资料是这个文档。其实也可以参考
A
U
T
O
S
A
R
AUTOSAR
AUTOSAR官方的文档。具体同步流程的简单示意图如图1所示。一般在有同步需求的一个
C
A
N
CAN
CAN总线网络中,在比较简单的情况下,一般会有一个节点叫做
T
i
m
e
m
a
s
t
e
r
Time\quad master
Timemaster,其它的节点都可以叫做
T
i
m
e
s
l
a
v
e
Time\quad slave
Timeslave。
T
i
m
e
s
l
a
v
e
Time\quad slave
Timeslave的时间节拍需要同步到和
T
i
m
e
m
a
s
t
e
r
Time\quad master
Timemaster一致。在一次整个同步过程中
T
i
m
e
m
a
s
t
e
r
Time\quad master
Timemaster会发送两个数据帧,第一个数据帧叫做
S
Y
N
C
m
e
s
s
a
g
e
SYNC\quad message
SYNCmessage,第二个数据帧叫做
F
U
P
m
e
s
s
a
g
e
FUP\quad message
FUPmessage。第一个数据帧发送的是这个数据帧发送起始时刻时间的整秒数,假设这个数据帧发送的时刻为
5.3
秒
=
5
秒
+
0.3
秒
=
5
秒
+
300
×
1000
×
1000
纳
秒
=
s
(
T
_
0
)
+
n
s
(
T
_
0
)
5.3秒=5秒+0.3秒=5秒+300×1000×1000纳秒=s(T\_0)+ns(T\_0)
5.3秒=5秒+0.3秒=5秒+300×1000×1000纳秒=s(T_0)+ns(T_0),则第一个数据帧发送的是
s
(
T
_
0
)
s(T\_0)
s(T_0)。在发送第一个数据帧的时候
T
i
m
e
m
a
s
t
e
r
Time\quad master
Timemaster会保存
s
(
T
_
0
)
s(T\_0)
s(T_0),
n
s
(
T
_
0
)
ns(T\_0)
ns(T_0)以及此刻
T
i
m
e
m
a
s
t
e
r
Time\quad master
Timemaster里面用来实现时间的计数器(一般是32位或64位的)的值
T
_
0
_
C
T\_0\_C
T_0_C。在第一个数据帧发送完的时刻(对于
T
i
m
e
m
a
s
t
e
r
Time\quad master
Timemaster来说是数据帧的
E
O
F
EOF
EOF域的最后一个比特位,对于
T
i
m
e
s
l
a
v
e
Time\quad slave
Timeslave来说是数据帧的
E
O
F
EOF
EOF域的倒数第二个比特位),
T
i
m
e
m
a
s
t
e
r
Time\quad master
Timemaster会记录此时的计数器的值为
T
X
_
S
t
a
m
p
TX\_Stamp
TX_Stamp,
T
i
m
e
s
l
a
v
e
Time\quad slave
Timeslave会记录此时的计数器的值为
R
X
_
S
t
a
m
p
RX\_Stamp
RX_Stamp。第二个数据帧发送的是
T
_
T
X
=
n
s
(
T
_
0
)
+
(
T
X
_
S
t
a
m
p
−
T
_
0
_
C
)
T\_TX=ns(T\_0)+(TX\_Stamp-T\_0\_C)
T_TX=ns(T_0)+(TX_Stamp−T_0_C)。在第二个数据帧发送完的时刻,
T
i
m
e
s
l
a
v
e
Time\quad slave
Timeslave会保存此时他的计数器的值
R
_
C
R\_C
R_C。那么在第二个数据帧发送完的时刻,
T
i
m
e
s
l
a
v
e
Time\quad slave
Timeslave相对于
T
i
m
e
m
a
s
t
e
r
Time\quad master
Timemaster的实际的时间应该是
T
_
a
=
s
(
T
_
0
)
+
T
_
T
X
+
(
R
_
C
−
R
X
_
S
t
a
m
p
)
T\_a=s(T\_0)+T\_TX+(R\_C-RX\_Stamp)
T_a=s(T_0)+T_TX+(R_C−RX_Stamp)。以上就是对同步过程的一个简单描述,
T
i
m
e
m
a
s
t
e
r
Time\quad master
Timemaster不断执行以上过程使得
T
i
m
e
s
l
a
v
e
Time\quad slave
Timeslave和
T
i
m
e
m
a
s
t
e
r
Time\quad master
Timemaster之间的时间基准基本一致。

软件实现精度低的原因是,软件实现是在帧开始发送或发送结束的时候使用终端函数的方式去读计数器的值,如果中断函数响应不及时就会造成精度较低,硬件实现方式就是直接使用硬件的方式自动的在帧开始发送或发送结束的时候捕获计数器的值从而避免了以上问题。
C
i
A
,
C
A
N
i
n
A
u
t
o
m
a
t
i
o
n
CiA,CAN\quad in\quad Automation
CiA,CANinAutomation是
C
A
N
CAN
CAN总线网络的国际用户和制造商的团体。它是成立于1992年的非盈利组织。它的目标是对于未来和
C
A
N
CAN
CAN总线网络相关的规范和标准提供一个一致性的平台。另外,它也会帮助世界范围内的所有的
C
A
N
CAN
CAN总线网络用户。
C
i
A
CiA
CiA的成员开发并发布
C
i
A
CiA
CiA规范,这些规范覆盖了
O
S
I
,
O
p
e
n
S
y
s
t
e
m
s
I
n
t
e
r
c
o
n
n
e
c
t
i
o
n
OSI,Open\quad Systems\quad Interconnection
OSI,OpenSystemsInterconnection的协议层以及不同领域的应用。
C
i
A
CiA
CiA的的代表积极支持
C
i
A
CiA
CiA的相关主机的国际标准化。除此之外,
C
i
A
CiA
CiA的成员共同促进不同市场的
C
A
N
CAN
CAN总线网络技术。这包括道路车辆、越野和非公路车辆、工业自动化、医疗设备、铁路车辆、海事电子、楼宇自动化、发电和配电等。
S
A
E
I
n
t
e
r
n
a
t
i
o
n
a
l
,
t
h
e
S
o
c
i
e
t
y
o
f
A
u
t
o
m
o
t
i
v
e
E
n
g
i
n
e
e
r
s
SAE\quad International,\quad the\quad Society\quad of\quad Automotive\quad Engineers
SAEInternational,theSocietyofAutomotiveEngineers是一个总部位于美国的组织,反正就是一个很牛逼的组织就是了,我们先来看一下维基百科上对这个组织的介绍。它是一个在各种工程专业领域里面活跃的专业人员组织和标准开发组织,它的重点放在航空和汽车等全球运输工业。这个组织有超过13800名会员,会员是以个人的形式而不是以公司的形式,它除了在标准化方面的努力,它也在和
S
T
E
M
(
科
学
,
技
术
,
工
程
,
数
学
)
STEM(科学,技术,工程,数学)
STEM(科学,技术,工程,数学) 教育,专业认证以及大学设计竞赛相关的项目上投入资源。从上面也可以看出这个组织也是很多标准的指定组织。
下面我们来简单的介绍一下
S
A
E
J
1939
SAE\quad J1939
SAEJ1939协议。我在这里对CAN总线协议进行了一个简单的介绍,参考于这里,
S
A
E
J
1939
SAE\quad J1939
SAEJ1939协议是一系列协议,它包含了很多部分,这些协议主要用于重型车辆上,它是基于
C
A
N
CAN
CAN总线协议的高层协议,也就是该协议的物理层和数据链路层和
C
A
N
CAN
CAN总线协议一样,
S
A
E
J
1939
SAE\quad J1939
SAEJ1939协议只使用29比特的ID,而没有使用11比特的ID,该协议使用的速率一般是250K或500K。
S
A
E
J
1939
SAE\quad J1939
SAEJ1939协议定义了电控单元之间如何进行通信,相当于
C
A
N
CAN
CAN总线协议提供了一个通信的通路,
S
A
E
J
1939
SAE\quad J1939
SAEJ1939协议定义了一种通信的语言。比如人与人之间的通信(语言交流)在空间中通过声波进行通信,但是语言又可以分为很多种,比如汉语,英语,法语和德语等,汉语,英语,法语和德语等就相当于是高层协议了。类似于
S
A
E
J
1939
SAE\quad J1939
SAEJ1939的高层协议还有
C
A
N
o
p
e
n
,
D
e
v
i
c
e
N
e
t
,
U
n
i
f
i
e
d
D
i
a
g
n
o
s
t
i
c
S
e
r
v
i
c
e
s
CANopen, DeviceNet, Unified\quad Diagnostic\quad Services
CANopen,DeviceNet,UnifiedDiagnosticServices。
S
A
E
J
1939
SAE\quad J1939
SAEJ1939协议和一般的
C
A
N
CAN
CAN总线协议的较大区别是,它对整个数据帧又往上一层做了进一步的定义,我们先来看一看对29比特的ID所做的进一步的定义。简单的示意图如图2所示。

这里将29比特的ID分为了三大部分, P r i o r i t y Priority Priority, P a r a m e t e r G r o u p N u m b e r Parameter\quad Group\quad Number ParameterGroupNumber和 S o u r c e A d d r e s s Source\quad Address SourceAddress。 P a r a m e t e r G r o u p N u m b e r Parameter\quad Group\quad Number ParameterGroupNumber又分为了四个部分。至于每一部分的具体含义我这里就不去讲了。
- R e s e r v e d Reserved Reserved
- D a t a P a g e Data\quad Page DataPage
- P D U F o r m a t PDU\quad Format PDUFormat
- P D U S p e c i f i c PDU\quad Specific PDUSpecific
这里最重要的应该还是这个 P a r a m e t e r G r o u p N u m b e r Parameter\quad Group\quad Number ParameterGroupNumber,简单的说这个域定义了当前的数据帧是为设备的哪一个功能所服务的,这里每一个 P a r a m e t e r G r o u p N u m b e r Parameter\quad Group\quad Number ParameterGroupNumber都对应了一个具体的功能,具体的值可以去 S A E J 1939 − 71 SAE\quad J1939-71 SAEJ1939−71查看。下面我们举一个例子,如图3所示。这里显示值为61444的 P a r a m e t e r G r o u p N u m b e r Parameter\quad Group\quad Number ParameterGroupNumber是和电机控制器相关的,这里还要注意的是图3中的 S P N D e s c r i p t i o n SPN\quad Description SPNDescription, S P N , S u s p e c t P a r a m e t e r N u m b e r SPN,Suspect\quad Parameter\quad Number SPN,SuspectParameterNumber,这也是一个比较重要的概念,前面说到 P a r a m e t e r G r o u p N u m b e r Parameter\quad Group\quad Number ParameterGroupNumber对应某一个具体功能,那么这个 S P N , S u s p e c t P a r a m e t e r N u m b e r SPN,Suspect\quad Parameter\quad Number SPN,SuspectParameterNumber就对应了相关的参数,比如在图3中这个值为61444的 P a r a m e t e r G r o u p N u m b e r Parameter\quad Group\quad Number ParameterGroupNumber表示的功能有7个相关参数,且每个参数都有对应的 S P N SPN SPN值,比如参数 E n g i n e T o r q u e M o d e Engine\quad Torque\quad Mode EngineTorqueMode的 S P N SPN SPN值为899。

假设现在终端设备需要获取电机控制器的相关参数,则这个终端设备可以发送一个数据帧,这个数据帧的ID为0x18EA00F9,3个数据域字节为0x04 0xF0 0x00 ,这里的ID的
P
a
r
a
m
e
t
e
r
G
r
o
u
p
N
u
m
b
e
r
Parameter\quad Group\quad Number
ParameterGroupNumber为0x0EA00,这是一个特殊的
P
a
r
a
m
e
t
e
r
G
r
o
u
p
N
u
m
b
e
r
Parameter\quad Group\quad Number
ParameterGroupNumber,表示这是一个
P
G
N
PGN
PGN请求报文,就相当于向网络中的节点请求相关功能的参数(这种特殊的请求报文只有3个数域字节,至于其它特殊的
P
a
r
a
m
e
t
e
r
G
r
o
u
p
N
u
m
b
e
r
Parameter\quad Group\quad Number
ParameterGroupNumber以及别的报文类型我这里就不细讲了,可以查阅
S
A
E
J
1939
SAE\quad J1939
SAEJ1939协议官方文档或其它参考资料),这个数据帧的数据域的前两个字节组合成0xF004,这里的0xF004就是图3中的电机控制器的
P
a
r
a
m
e
t
e
r
G
r
o
u
p
N
u
m
b
e
r
Parameter\quad Group\quad Number
ParameterGroupNumber,这个将要发送的数据帧的29比特ID的
S
o
u
r
c
e
A
d
d
r
e
s
s
Source\quad Address
SourceAddress字节0xF9表示这个终端设备的地址为0xF9。总结来说就是外部设备地址为0xF9的车外诊断服务工具请求电机控制器的参数,电机控制器的参数组编号为0xF004,也正是该0xF004参数组编号决定了这条报文是请求电机控制器参数的。
假设这条数据帧发送之后收到的数据帧的ID为0x18F00400,8个字节的数据域为0x00,0x00,0x00,0x12,0x34,0x00,0x00,0x00,这里的ID的
P
a
r
a
m
e
t
e
r
G
r
o
u
p
N
u
m
b
e
r
Parameter\quad Group\quad Number
ParameterGroupNumber为0x0F004表示这个数据帧的数据域存储的是和电机控制器的相关参数,这个收到的数据帧的数据域的第4和第5个数据字节为0x12和0x34,我们再看一下图3就知道这两个字节的值表示的是发动机速度,从图3中我们也可以知道这个发动机速度对应的
S
P
N
,
S
u
s
p
e
c
t
P
a
r
a
m
e
t
e
r
N
u
m
b
e
r
SPN,Suspect\quad Parameter\quad Number
SPN,SuspectParameterNumber就为190,那我们可以去
S
A
E
J
1939
−
71
SAE\quad J1939-71
SAEJ1939−71查看
S
P
N
,
S
u
s
p
e
c
t
P
a
r
a
m
e
t
e
r
N
u
m
b
e
r
SPN,Suspect\quad Parameter\quad Number
SPN,SuspectParameterNumber为190的相关描述,如图4所示。我们可以知道这个返回的数据帧的发动机速度的值为
0
x
3412
=
13330
0x3412=13330
0x3412=13330,在图4中我们知道这个发动机速度的单位为
0.125
r
p
m
/
b
i
t
0.125 \quad rpm/bit
0.125rpm/bit,因此实际的发送机速度为
13330
×
0.125
=
1666.25
r
p
m
13330 \times 0.125=1666.25\quad rpm
13330×0.125=1666.25rpm

好了我这里只是对 S A E J 1939 SAE\quad J1939 SAEJ1939协议做了一个非常简单的入门介绍,如果有需要深入的朋友还需要自己查找以下相关的资料和 S A E J 1939 SAE\quad J1939 SAEJ1939官方文档,我这里也有部分文档:SAE-J1939-21,SAE-J1939-71以及PPT介绍
A
U
T
o
m
o
t
i
v
e
O
p
e
n
S
y
s
t
e
m
A
R
c
h
i
t
e
c
t
u
r
e
,
A
U
T
O
S
A
R
)
AUTomotive\quad Open\quad System\quad ARchitecture, \quad AUTOSAR)
AUTomotiveOpenSystemARchitecture,AUTOSAR)简介:
A
U
T
O
S
A
R
AUTOSAR
AUTOSAR是一种开放式的系统体系架构,它的目的是为了汽车整车制造商和其一级供应商之间减少开发成本,提高电控单元相关软件的质量,这可以通过尽量避免去重复开发相似的电控单元相关软件,提高软件代码可复用性来达到。像自动驾驶等许多具有创新性的汽车功能都是基于整车的软件功能,为了这些功能的完美实现以及满足实时性要求,整车上的每一个电控单元都必须稳定运行且现在一台整车上的电控单元的数量是越来越多。
在早期不同的供应商提供的电控单元的软件接口和标准可能都不一样,因为没有统一的软件体系架构,如果汽车整车制造商现在突然要从一家供应商切换到另一家供应商,那么因为不同的供应商提供的电控单元的软件接口和标准可能都不一样,所以全部都要重新开始,软件的复用率极低,严重影响了开发效率。所以
A
U
T
O
S
A
R
AUTOSAR
AUTOSAR存在的目的就是将大部分汽车整车制造商以及供应商联合起来来建立一种统一的体系结构,这样只要各个整车制造商以及供应商按照这种统一的体系结构开发对应的相关软件,这样不同供应商开发的软件就可以极大程度的复用从而减少了开发时间和成本,提高了效率。