Skip to content

# 13.4. MCU时间同步说明

## 13.4.1. MCU支持的时间类型

- PHC时间：这个是网卡内部的一个计时器 ；

- RTC时间：这个J6X MCU侧带的一个实时时钟，不支持通过纽扣电池供电 ；

- Stbm时间：这个是AUTOSAR基于硬件时间抽象出来的软件时间，Stbm底层的硬件可以是PHC或者Gpt ；

## 13.4.2. MCU支持的时间同步方式

MCU支持下面三种时间同步方式 :

- AUTOSAR CANTsync： 时间同步协议使用的是Stbm时间 ；

- AUTOSAR EthTsync： 时间同步协议使用的是Stbm时间，推荐使用基于PHC的stbm时间， 因为网卡可以给时间同步报文打硬件时间戳，这样减小时间同步误差 ；

- 基于PPS的Timesync： 在秒脉充上升沿捕捉到两个时间的snapshot，根据snapshot计算误差， 根据误差进行时间同步 ；

## 13.4.3. 基于PPS的Timesync

代码目录： mcu/Service/TimeSync/src/

### 13.4.3.1. 支持的时间

- RTC

- Stbm(PHC)

- Stbm(Gpt)

- PHC

### 13.4.3.2. 配置方法

通过修改配置决定使用哪种时间同步方式，目前只是支持下面两种时间同步方式 ：

- Stbm(PHC)同步RTC ；

- PHC同步RTC ；

    /*TimeSync Config Begin*/
    static uint8 ConfigSource[] = {
        TIMEKEEPER_NONE, //TimeKeeperRTC Source
        TIMEKEEPER_NONE, //TimeKeeperGPS Source
        TIMEKEEPER_NONE, //TimeKeeperStbmPhc Source
        TIMEKEEPER_NONE, //TimeKeeperSpi Source
        TIMEKEEPER_NONE, //TimeKeeperIPC Source
        TIMEKEEPER_NONE, //TimeKeeperPHC Source
        TIMEKEEPER_NONE  //TimeKeeperGpt Source
    };

    static _Bool EnableTimeKeeper[] = {
        FALSE,//TimeKeeperRTC
        FALSE,//TimeKeeperGPS
        FALSE,//TimeKeeperStbmPhc
        FALSE,//TimeKeeperSpi
        FALSE,//TimeKeeperIPC
        FALSE,//TimeKeeperPHC
        FALSE//TimeKeeperGpt
    };

    _Bool Enable_HobotTimesync_Debug = FALSE;
    static _Bool EthTsync_Master_Use_Phc = TRUE;
    uint8 TineSync_PPS_Index = TIMESYNC_AON_RTC_PPS;

    /*TimeSync Config End*/

ConfigSource： 配置每个时间的时间源，如果一个时间不需要和其他时间同步，时间源配置成TIMEKEEPER_NONE 可以配置的时间源为 ：

    typedef enum TimeKeeperIndexEnum {
        TIMEKEEPER_RTC_INDEX,
        TIMEKEEPER_GPS_INDEX,
        TIMEKEEPER_STBMPHC_INDEX,
        TIMEKEEPER_SPI_INDEX,
        TIMEKEEPER_IPC_INDEX,
        TIMEKEEPER_PHC_INDEX,
        TIMEKEEPER_STBMGPT_INDEX,
        TIMEKEEPER_NONE,
        TIMEKEEPER_NUM_MAX,
    } TimeKeeperIndex;

EnableTimeKeeper： 配置时间是否打开 ；

Enable_HobotTimesync_Debug： 配置是否开启打印 ；

TineSync_PPS_Index： 配置使用哪个PPS进行时间同步，可以使用的PPS如下 ：

    #define PPS_IN0                         0
    #define PPS_IN1                         1
    #define PPS_IN2                         2
    #define RTC_PPS                         3
    #define PPS_INVALID                     4

### 13.4.3.3. 配置举例

如果想配置RTC和GPS进行时间同步， 配置如下:

    /*TimeSync Config Begin*/
    static uint8 ConfigSource[] = {
        TIMEKEEPER_GPS_INDEX, //TimeKeeperRTC Source
        TIMEKEEPER_NONE, //TimeKeeperGPS Source
        TIMEKEEPER_NONE, //TimeKeeperStbmPhc Source
        TIMEKEEPER_NONE, //TimeKeeperSpi Source
        TIMEKEEPER_NONE, //TimeKeeperIPC Source
        TIMEKEEPER_NONE, //TimeKeeperPHC Source
        TIMEKEEPER_NONE  //TimeKeeperGpt Source
    };

    static _Bool EnableTimeKeeper[] = {
        TRUE,//TimeKeeperRTC
        TRUE,//TimeKeeperGPS
        FALSE,//TimeKeeperStbmPhc
        FALSE,//TimeKeeperSpi
        FALSE,//TimeKeeperIPC
        FALSE,//TimeKeeperPHC
        FALSE//TimeKeeperGpt
    };

    Boolean Enable_HobotTimesync_Debug = FALSE;
    /*TimeSync Config End*/