TimeNIC — PCIe I226 NIC with SMA Timing Ports and TCXO
TimeNIC — PCIe I226 NIC with SMA Timing Ports and TCXO
The TimeNIC is a small form-factor PCIe NIC designed to bring precision timing and advanced network functionality to any system with a PCIe slot. Built around the Intel I226 Ethernet controller, it integrates front-panel SMA connectors for 1PPS input and output, a high-stability TCXO, and full support for PTM (Precision Time Measurement) over PCIe — making it one of the most capable and affordable precision timing NICs available.
If you’re familiar with the TimeHAT, the TimeNIC is its PCIe sibling — the same core I226 timing design, now in a standard PCIe card for desktops, servers, and embedded systems.
GitHub: https://github.com/Time-Appliances-Project/TimeNIC
What’s in the Box
- TimeNIC PCIe card
- PCIe full-height bracket, installed with 2x M2.5×6 screws and 2x M2.5 nuts
Key Features
SMA Ports for 1PPS Input and Output
The only I226 NIC on the market with easy front-panel SMA connectors for SDP0 (1PPS output) and SDP1 (1PPS input). Use them to:
- Validate PTP and PTM performance
- Inject a 1PPS reference from GPS or an atomic clock and distribute time over PTP
- Measure precise time intervals with external equipment
TCXO — High-Stability Oscillator
The only I226 NIC — and likely the most affordable PTP NIC — on the market with a Temperature-Compensated Crystal Oscillator (TCXO) backing the chipset. This delivers low-jitter timing distribution and stable frequency across temperature variations.
TCXO used: ECS-TXO53-S3-33-250-BN-TR datasheet
PTM — Precision Time Measurement over PCIe
The biggest capability the TimeNIC has over the TimeHAT: PTM (Precision Time Measurement). PTM is essentially PTP over PCIe, transferring nanosecond-accurate time from the NIC directly to the CPU and userland code — without needing a network packet.
- Supported on Intel Gen 11+ consumer CPUs and many others
- OCP TAP PTM Readiness list: opencompute.org/wiki/PTM_Readiness
- Kevin Stanton (PTM architect, formerly Intel) OCP TAP talk: YouTube / Slides
- All OCP TAP talks: opencompute.org/wiki/Time_Appliances_Project
TimeHAT Relationship
The TimeNIC shares its core design with the TimeHAT — both are I226-based precision timing platforms. Most TimeHAT software documentation applies here. The main difference is the kernel patch process for fixing the 1PPS input rising-edge behavior, which is documented on the TimeNIC GitHub repo.
Setup & Usage Guide
Tested on Ubuntu 24.04 fresh install.
Pre-Setup Steps
A. Install linuxptp and utilities:
sudo apt install linuxptp
sudo apt install gccB. Download testptp:
cd ~ ; mkdir testptp; cd testptp
wget https://raw.githubusercontent.com/torvalds/linux/refs/heads/master/tools/testing/selftests/ptp/testptp.c
wget https://raw.githubusercontent.com/torvalds/linux/refs/heads/master/include/uapi/linux/ptp_clock.h
sudo cp ptp_clock.h /usr/include/linux/ptp_clock.hC. Compile testptp:
gcc -Wall -lrt testptp.c -o testptpD. Install testptp:
sudo cp testptp /usr/bin/E. Find which PTP interface maps to the TimeNIC using ethtool:
On the example system below, the NIC is enp1s0 and the PTP Hardware Clock is 0, so the device is /dev/ptp0:
ethtool -T enp1s0Time stamping parameters for enp1s0:
Capabilities:
hardware-transmit
software-transmit
hardware-receive
software-receive
software-system-clock
hardware-raw-clock
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
off
on
Hardware Receive Filter Modes:
none
allF. Verify testptp works:
sudo testptp -d /dev/ptp0 -lShould see:
name SDP0 index 0 func 0 chan 0
name SDP1 index 1 func 0 chan 0
name SDP2 index 2 func 0 chan 0
name SDP3 index 3 func 0 chan 0Configure 1PPS Output
Setup SDP0 (SMA1, furthest from PCIe fingers, above RJ45) as periodic output:
sudo testptp -d /dev/ptp0 -L0,2
sudo testptp -d /dev/ptp0 -p 1000000000Read 1PPS SMA Input
A. Setup SDP1 (SMA2, below RJ45) as timestamp input:
sudo testptp -d /dev/ptp0 -L1,1B. Read timestamps. Use -1 to read forever and ctrl+C to stop; using 5 here as a demo.
Note: The I226 driver passes both rising and falling edges to Linux. A fix requiring a kernel patch is documented on the GitHub repo.
sudo testptp -d /dev/ptp0 -e 5Discipline to 1PPS SMA Input
Note: For best results, install the PPS input kernel patch fix first (see GitHub).
A. Verify PPS input on SMA2 using the testptp steps above.
B. Set NIC PHC based on system time to get Time-Of-Day:
sudo phc_ctl enp1s0 "set;" adj 37C. Use ts2phc to discipline NIC from 1PPS:
sudo ts2phc -c /dev/ptp0 -s generic --ts2phc.pin_index 1 -m -l 7Fix 1PPS Input to Only Use Rising Edge (Advanced)
Full instructions are on the TimeNIC GitHub repo (easier to read and follow there).