StbM 和 Time Synchronization Over CAN and Ethernet(二) 以EthTSyn和StbM为例
1. 代码中首先要初始化 EthTSyn_Init():
1.1 判断时钟域
1.2 Master 与 Slave 报文发送的相关变量:
SYNC 和 FUP 报文发送时相关变量、
SYNC 和 FUP 报文接收时相关变量、
Pdelay_Req 报文发送时变量、
Pdelay_Resp 和 Pdelay_Resp_FUP 发送时的相关变量、
Pdelay_Resp 和 Pdelay_Resp_FUP 接收时的相关变量
1.3 获取以太网的 MAC 地址
2. 之后进入 EthTSyn_MainFunction():[要判断时钟域,以及是 Master 还是 Slave]
如果是 Master:
2.1 发送 SYNC 和 FUP 报文,
如果是 SYNC 报文:
a) 根据时钟域通过以太网开始发 SYNC 报文,并记录时间戳,EthTSyn 报文通过 EthIf_ProvideTxBuffer() 的内存,通过 EthIf_Transmit() 传出去,之后通过 Eth_Hw_Transmit() 将报文传出去。
b) SYNC 的内部时钟条件置起来
c) FUP 的 offset 条件置起来
2.2 如果是 FUP 报文:
a) 根据时钟域通过以太网开始发 FUP 报文,并记录时间戳,EthTSyn 报文通过 EthIf_ProvideTxBuffer() 的内存,通过 EthIf_Transmit() 传出去,之后通过 Eth_Hw_Transmit() 将报文传出去。
2.3 Time Master 通过 reference Local clock 来更新本地全局时间,然后通过 sync/FUP 报文发送给到总线上。其中,如果 Time Domain 为 0-15 则为 synchronized Time base,而 Time Domain 16-31则为 Offset Time Base。
通过调用函数接口 StbM_GetCurrentTime() 来获取当前对应Time Domain下的Time Base,对应的timebasestatus以及user data;
通过调用函数接口StbM_GetCurrentTimeRaw() 来获取当前时间Time Base的ns部分;
通过调用函数接口StbM_GetCurrentTimeDiff() 来获取输入的时间戳与当前时间戳的时间间隔,单位为ns;
通过调用函数接口StbM_BusSetGlobalTime()来更新当前的Time Base以及设置对应的timebaseStatus;
通过调用函数接口 StbM_SetGlobalTime()并且会就将GLOBAL_TIME_BASE bit位置1,同时清除其他bit 位;
如果是 Slave:
2.4 接收 SYNC 和 FUP 报文,通过 EthTSyn_Internal_SyncReceiveStateMachine() 置起来的对应的状态
2.5 如果此时是接收 FUP 报文的状态,调用 EthTSyn_Internal_Rate_Ratio() 先将收到的报文转化成时间
a) 将从端口 SYNC 接收的时间戳转换为纳秒
b) 将主端 SYNC 的源时间戳转换为纳秒
c) 获取入口时间和出口时间 Offset
2.6 调用 EthTSyn_Internal_PdelayReqStateMachine() ,执行 Pdelay_Req 的传输和 Pdelay_Resp 和 Pdelay_Resp_Follow_Up 报文的接收,并设置各个条件的状态机。
a) 当最后一帧报文 Pdelay_Resp_Follow_Up 发完后,开始进行速率偏差的运算 [一条报文从开始发送到发送完成的速率偏差]
b) 获取入口时间和 Pdelay_Resp 的出口时间戳,计算 Pdelay 的 RateRatio
c) 之后根据所有获得的时间 T1、T2、T3、T4,计算平均路径延迟 Delay
a) 在网络中,一般主-->从,从-->主 网络延时是一样
T4 - T3 = delay - offset;
T2 - T 1 = delay+ offset;
b) 因此传递的延时 :
delay = [(T4-T3) + (T6-T5)] / 2 [端延时机制同步原理]
c) 由于offset存在,映射到从时钟 时间轴上计算offset:
offset = (T2-T1) - {[(T4-T3) + (T6-T5)] / 2} [端延时机制同步原理]
2.7 同步矫正计算:计算从 Master 到 Slave 的 offset 并与 Master 同步 synchronize_clock()
a) 以太网的时间同步矫正
SYNC_Master_to_Slave_Delay = (SYNC_t2Recv_time - SYNC_t1Send_time) - offset
b) StbM的时间同步矫正
1. 调用 StbM_GetCurrentTime() ,获取当前对应 Time Domain 下的 Time ,以及对应的 TimeBaseStatus 和 UserData
2. 调用 StbM_Internal_ValidateTimeBaseId() 验证是否接收到正确的 Time Base ID
3. 调用 StbM_Internal_UpdateOSCounterTimeStamp() 驱动 Global Time 的 Local Instance,通过本地硬件参考(操作系统计数器、GPT 计数器或以太网自由运行计数器)进行
4. 对于Triggered customer,当前仅用于同步OS的schedule table,通过调用OS提供的API函数 SyncScheduleTable() 来实现Schedule Table之间的counter同步。通过配置参数 STBM_TRIGGERED_CUSTOMER_PERIOD 来完成StbM定周期调用上述函数接口来完成各个sechdule table 的os counter间的同步。同时StbM仅在Schedule Table 处于WAITING,RUNNING,或者 RUNNING_SYNCHRONOUS状态时完成同步,因此也就意味着StbM在同步前先要确认下当前需同步的Schedule Table的状态,然后才能进行同步。
5. 根据从 StbM_GetCurrentTime() 获得的时间,计算 StbM 需要的时间 ,之后传递给 StbM_BusSetGlobalTime()
6. 对于Time Bases 0 到 15,每次调用 StbM_BusSetGlobalTime() 都应更新相应的主时间元组[Main Time Tuple]并相应地设置 UserData 和TimeBaseStatus
3. 最后在 EthTSyn_MainFunction() 里,每发完一帧报文,以太网会进入 EthTSyn_Internal_UpdateTimer() ,根据上面置起来的条件,判断发送的报文并且累计报文发送Counter 并且判断报文是否超时。
StbM 和 Time Synchronization Over CAN and Ethernet(二) 以EthTSyn和StbM为例相关推荐
- Intel 万兆网卡调研 X520 X540 X550 X710 X810 对比 10GB/40GB/100GB NIC
目录 对Intel网卡进行调研 支持SR-IOV的网卡 X520 X540 X550对比 区别 相同 X520 X710 X810系列对比 区别 X520网卡文档翻译 Overview Best ch ...
- Linux下双网卡绑定(bonding技术)
Linux网卡绑定探析 2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的网卡 ...
- redhat下网络的配置
redhat下配置网络主要有两种方式:敲setup命令图形界面配置和通过修改网络配置文件的方式. 前者的本质也是修改配置文件. 下面重点介绍修改网络配置文件的方式. 一.IP的配置: 第一(二)块网卡 ...
- Linux操作系统下iptables+nat实现ADSL共享上网!
Linux操作系统下iptables+nat实现ADSL共享上网! ADSL作为一种较为成熟的宽带接入技术,凭着传输速度快.安装使用方便,无需太多的投入,以及节省费用等优点被现在大部分家庭和中小企业所 ...
- Linux双网卡绑定
Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作.其实这项技术在Su ...
- linux查看绑定ipv6的端口号,[原创]如何在windows和linux绑定IPV6
脚本方式: windows系统: linux系统:wget http://downinfo.myhostadmin.net/vps/setipv6.sh Usage: ./setipv6.sh -s[ ...
- 一个小兔子的大数据见解2
Big Data 阿里的大数据解决方案 MAXCOMPUTE DATAWORKS QUICKBI 1.Vmware增强 2. 1.1.VMware 虚拟网络设备 1.1.1.虚拟网卡.虚拟交换机 虚拟 ...
- FPGA(二)串口通信
UART串口通信 前言 一.什么是串口? 1.同步串行通信 2.异步串行通信 总结: 二.串口的协议层面与物理层面 1.协议层 (1)传输格式 (2)传输速率 2.物理层 (1)接口类型 (2)电平标 ...
- 蓝牙5 BR/EDR Baseband层分析
目录: 概述 物理信道 物理连接 逻辑传输 逻辑连接 数据包 比特流加工 链路控制器 音频处理 一.概念描述 蓝牙时钟:Bluetooth Clock 蓝牙设备地址:Bluetooth Device ...
最新文章
- 最初的感动:各种应用和代码在BCH这里不断复活
- 开源 java CMS - FreeCMS2.7 移动端首页静态化
- Houdini FX 14 重磅推出!(附下载方式)
- Go Time常用语法
- lnmp yum安装mysql_centos5 yum安装lnmp
- 使用spring 配置数据源,并用数据源得到连接,操作sql
- C# 无法识别的转义序列
- python - super 寻找继承关系
- 使用html2canvas将html标签转化为图片
- 【ASP.NET MVC4】第一课:初识ASP.NET MVC,创建第一个ASP.NET MVC项目
- csrss.exe介绍
- 计算机wmi配置错误,系统没有WMI服务怎么办、WMI错误修复方法
- IP-guard功能模块简介
- C#winform中弹出提示框,点击确认或者取消(是或否)
- 从.Net类库代码来看Asp.net运行时(转自酷网动力)
- MySQL数据库的数据更新
- 小巧方便C语言开发工具 Dev-C++
- 结转损益和结转本年利润是一个概念吗
- mapbox-gl开发教程(一):搭建前端开发环境
- 思维导图 mindnote,MindMaster,亿图图示,百度脑图