4.2 ENET IEEE-1588
4.2.1 Introduction
ENET IEEE-1588 드라이버는 네트워크 통신에서 클럭의 정확한 동기화를 가능하게 하는 일련의 기능을 수행한다.
드라이버는 완전한 전체 IEEE-1588 프로토콜를 위한 프로토콜 스택이 필요하다. LinuxPTP 스택을 준수한다.
IEEE 1588이나 이와 유사한 시간 동기화 프로토콜 구현을 허용하기 위해, ENET MAC은 들어오고 나가는 프레임의 정확한 타임 스탬프를 지원하는 타임 스탬프 모듈과 결합된다.
4.2.1.1 Transmit Timestamping
전송 시, 1588 이벤트 프레임만 타임 스탬프가 필요하다. 클라이언트 애플리케이션(예: MAC 드라이버)은 1588 이벤트 프레임을 감지하고 프레임과 함께 ff_tx_ts_frm 신호를 설정해야 한다.
전송된 모든 프레임에 대해, 프레임 시퀀스 번호(tx_ts_id(3:0)) 및 전송 상태와 함께 tx_ts (31:0)에 캡쳐된 타임스탬프를 MAC은 반환한다. 전송 상태 비트 tx_ts_stat (5)는 애플리케이션이 프레임에 대해 어설션된 ff_tx_ts_frm 신호를 가지고 있다는 것을 나타낸다.
ff_tx_ts_frm이 '1'로 설정되면, MAC은 레지스터 TS_TIMESTAMP의 프레임에 대한 타임스탬프를 추가로 기억한다. 인터럽트 비트 EIR (TS_AVAIL)은 새로운 타임스탬프를 사용할 수 있다는 것을 나타내도록 설정한다.
소프트웨어는 타임스탬프가 필요한 프레임을 전송할 때 ff_tx_ts_frm 신호를 설정하고, 타임스탬프를 사용할 수 있는 시점을 알기 위해 EIR (TS_AVAIL) 인터럽트 비트를 대기하여 핸드쉐이킹 절차를 구현한다. 그런 다음, TS_TIMESTAMP 레지스터에서 타임스탬프를 읽을 수 있다. 이것은 모든 이벤트 프레임에 대해 수행된다. 다른 프레임은 ff_tx_ts_frm 표시기를 사용하지 않으므로 타임스탬프 캡처를 방해하지 않는다.
4.2.1.2 Receive Timestamping
프레임이 수신되면, MAC은 프레임 SFD 필드가 감지될 때 타이머의 값을 래치하고 ff_rx_ts(31:0)에 캡쳐된 타임스탬프를 제공한다. 이것은 수신된 모든 프레임에 대해 수행된다.
DMA 컨트롤러는 프레임에 제공된 타임스탬프를 소프트웨어 액세스를 위한 수신 디스크립터 내의 해당 필드로 전송해야 한다.
4.2.2 Software Operation
1588 드라이버에는 다음과 같은 기능이 있다:
- Module initialization - 디바이스별 구조체로 모듈을 초기화하고, 캐릭터(character) 드라이버를 등록한다.
- Interrupt servicing routine - TS_AVAIL, TS_TIMER와 같은 이벤트를 지원한다. 드라이버는 FEC 드라이버와 인터럽트 서비스 루틴을 공유한다.
4.2.2.1 Source Code Structure
아래 테이블에는 drivers/net/ethernet/freescale 디렉토리에 있는 소스 파일이 나열되어 있다.
Table 37. ENET 1588 File List
File | Description |
---|---|
drivers/net/ethernet/frescale/fec.h | 레지스터를 정의한 헤더 파일 |
drivers/net/ethernet/freescale/fec_ptp.c | ENET 1588 타이머 |
4.2.2.2 Menu Configuration Options
ENET 1588은 기본으로 활성화되어 있다.
4.2.2.3 Programming Interface
1588 드라이버는 Linuxptp 프로토콜 스택 인터페이스를 준수한다.
스택별 정의가 헤더 파일(fec.h)에 추가되어 있다.
4.2.3 1588 Stack Introduction
이 릴리스는 아래 타입의 1588 스택을 지원한다:
- Linuxptp 스택
이 소프트웨어는 Linux OS용 IEEE 표준 1588에 해당하는 Precision Time Protocol (PTP) 구현이다. 이중 디자인의 목표는 표준의 강력한 구현을 제공하고 Linux OS 커널에서 제공하는 가장 적절하고 최신의 Application Programming Interfaces (API)를 사용하는 것이다. 레거시 API와 다른 플랫폼을 지원하는 것은 목표가 아니다. 이 소프트웨어 저작권은 저자에게 있으며, GNU General Public License에 따라 사용이 허가된다.
소프트웨어 개발은 Source Forge: sourceforge.net/projects/linuxptp/ 에서 호스팅되고 있다.
4.2.3.1 Linuxptp Stack Features
Linuxptp는 아래 기능을 지원한다:
- Ordinary(일반)/Boundary(경계) Clock
- 최고의 마스터 클럭 알고리즘
- UDP/IPv4, UDP/IPv6와 IEEE 802.3을 사용한 전송
- Transparent(투명) 클럭 (E2E/P2P)
- 슬레이브 전용
- 엔드 스테이션 규칙에서 IEEE 802.1AS-2011 지원
4.2.3.2 Using Linuxptp
아래 커맨드를 사용하여 ptp4 1588 스택 바이너리를 실행한다.
Linuxptp:
Transport on UDP IPV4 with E2E delay mechanism: ptp4l -A -4 -H -m -i eth0
Transport on UDP IPV4 with P2P delay mechanism: ptp4l -P -A -4 -H -m -i eth0
Transport on UDP IPV6 with E2E delay mechanism: ptp4l -A -6 -H -m -i eth0
Transport on UDP IPV6 with P2P delay mechanism: ptp4l -P -A -6 -H -m -i eth0
Transport on IEEE 802.3 with E2E delay mechanism: ptp4l -A -2 -H -m -i eth0
Transport on IEEE 802.3 with P2P delay mechanism: ptp4l -P -A -2 -H -m -i eth0