{"product_id":"timenic","title":"TimeNIC — PCIe I226 NIC with SMA Timing Ports and TCXO","description":"\u003ch2\u003eTimeNIC — PCIe I226 NIC with SMA Timing Ports and TCXO\u003c\/h2\u003e\u003cp\u003eThe 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 \u003cstrong\u003eIntel I226 Ethernet controller\u003c\/strong\u003e, it integrates front-panel SMA connectors for 1PPS input and output, a high-stability TCXO, and full support for \u003cstrong\u003ePTM (Precision Time Measurement)\u003c\/strong\u003e over PCIe — making it one of the most capable and affordable precision timing NICs available.\u003c\/p\u003e\u003cp\u003eIf you’re familiar with the \u003ca href=\"\/products\/raspberry-pi-5-pcie-hat-with-i226-nic-timehat\"\u003eTimeHAT\u003c\/a\u003e, the TimeNIC is its PCIe sibling — the same core I226 timing design, now in a standard PCIe card for desktops, servers, and embedded systems.\u003c\/p\u003e\u003cp\u003eGitHub: \u003ca href=\"https:\/\/github.com\/Time-Appliances-Project\/TimeNIC\" target=\"_blank\"\u003ehttps:\/\/github.com\/Time-Appliances-Project\/TimeNIC\u003c\/a\u003e\u003c\/p\u003e\u003chr\u003e\u003ch3\u003eWhat’s in the Box\u003c\/h3\u003e\u003cul\u003e\n\u003cli\u003eTimeNIC PCIe card\u003c\/li\u003e\n\u003cli\u003ePCIe full-height bracket, installed with 2x M2.5×6 screws and 2x M2.5 nuts\u003c\/li\u003e\n\u003c\/ul\u003e\u003chr\u003e\u003ch3\u003eKey Features\u003c\/h3\u003e\u003ch4\u003eSMA Ports for 1PPS Input and Output\u003c\/h4\u003e\u003cp\u003eThe only I226 NIC on the market with easy front-panel SMA connectors for \u003cstrong\u003eSDP0\u003c\/strong\u003e (1PPS output) and \u003cstrong\u003eSDP1\u003c\/strong\u003e (1PPS input). Use them to:\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003eValidate PTP and PTM performance\u003c\/li\u003e\n\u003cli\u003eInject a 1PPS reference from GPS or an atomic clock and distribute time over PTP\u003c\/li\u003e\n\u003cli\u003eMeasure precise time intervals with external equipment\u003c\/li\u003e\n\u003c\/ul\u003e\u003ch4\u003eTCXO — High-Stability Oscillator\u003c\/h4\u003e\u003cp\u003eThe only I226 NIC — and likely the most affordable PTP NIC — on the market with a \u003cstrong\u003eTemperature-Compensated Crystal Oscillator (TCXO)\u003c\/strong\u003e backing the chipset. This delivers low-jitter timing distribution and stable frequency across temperature variations.\u003c\/p\u003e\u003cp\u003eTCXO used: \u003ca href=\"https:\/\/ecsxtal.com\/store\/pdf\/ECS-TXO53-S3.pdf\" target=\"_blank\"\u003eECS-TXO53-S3-33-250-BN-TR datasheet\u003c\/a\u003e\u003c\/p\u003e\u003ch4\u003ePTM — Precision Time Measurement over PCIe\u003c\/h4\u003e\u003cp\u003eThe biggest capability the TimeNIC has over the \u003ca href=\"\/products\/raspberry-pi-5-pcie-hat-with-i226-nic-timehat\"\u003eTimeHAT\u003c\/a\u003e: \u003cstrong\u003ePTM (Precision Time Measurement)\u003c\/strong\u003e. 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.\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003eSupported on Intel Gen 11+ consumer CPUs and many others\u003c\/li\u003e\n\u003cli\u003eOCP TAP PTM Readiness list: \u003ca href=\"https:\/\/www.opencompute.org\/wiki\/PTM_Readiness\" target=\"_blank\"\u003eopencompute.org\/wiki\/PTM_Readiness\u003c\/a\u003e\n\u003c\/li\u003e\n\u003cli\u003eKevin Stanton (PTM architect, formerly Intel) OCP TAP talk: \u003ca href=\"https:\/\/www.youtube.com\/watch?v=JOucm1vjk8o\" target=\"_blank\"\u003eYouTube\u003c\/a\u003e \/ \u003ca href=\"https:\/\/docs.google.com\/presentation\/d\/1e0Ls-H9d8yR4pjitUA0gvdg7iETZVhNe\/edit?usp=sharing\u0026amp;ouid=104727018165459345315\u0026amp;rtpof=true\u0026amp;sd=true\" target=\"_blank\"\u003eSlides\u003c\/a\u003e\n\u003c\/li\u003e\n\u003cli\u003eAll OCP TAP talks: \u003ca href=\"https:\/\/www.opencompute.org\/wiki\/Time_Appliances_Project\" target=\"_blank\"\u003eopencompute.org\/wiki\/Time_Appliances_Project\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\u003ch4\u003eTimeHAT Relationship\u003c\/h4\u003e\u003cp\u003eThe TimeNIC shares its core design with the \u003ca href=\"\/products\/raspberry-pi-5-pcie-hat-with-i226-nic-timehat\"\u003eTimeHAT\u003c\/a\u003e — 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 \u003ca href=\"https:\/\/github.com\/Time-Appliances-Project\/TimeNIC\" target=\"_blank\"\u003eTimeNIC GitHub repo\u003c\/a\u003e.\u003c\/p\u003e\u003chr\u003e\u003ch2\u003eSetup \u0026amp; Usage Guide\u003c\/h2\u003e\u003cp\u003e\u003cem\u003eTested on Ubuntu 24.04 fresh install.\u003c\/em\u003e\u003c\/p\u003e\u003ch3\u003ePre-Setup Steps\u003c\/h3\u003e\u003cp\u003e\u003cstrong\u003eA. Install linuxptp and utilities:\u003c\/strong\u003e\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo apt install linuxptp\nsudo apt install gcc\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eB. Download testptp:\u003c\/strong\u003e\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003ecd ~ ; mkdir testptp; cd testptp\nwget https:\/\/raw.githubusercontent.com\/torvalds\/linux\/refs\/heads\/master\/tools\/testing\/selftests\/ptp\/testptp.c\nwget https:\/\/raw.githubusercontent.com\/torvalds\/linux\/refs\/heads\/master\/include\/uapi\/linux\/ptp_clock.h\nsudo cp ptp_clock.h \/usr\/include\/linux\/ptp_clock.h\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eC. Compile testptp:\u003c\/strong\u003e\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003egcc -Wall -lrt testptp.c -o testptp\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eD. Install testptp:\u003c\/strong\u003e\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo cp testptp \/usr\/bin\/\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eE. Find which PTP interface maps to the TimeNIC using ethtool:\u003c\/strong\u003e\u003c\/p\u003e\u003cp\u003eOn the example system below, the NIC is \u003ccode\u003eenp1s0\u003c\/code\u003e and the PTP Hardware Clock is \u003ccode\u003e0\u003c\/code\u003e, so the device is \u003ccode\u003e\/dev\/ptp0\u003c\/code\u003e:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003eethtool -T enp1s0\u003c\/code\u003e\u003c\/pre\u003e\u003cpre\u003e\u003ccode\u003eTime stamping parameters for enp1s0:\nCapabilities:\n        hardware-transmit\n        software-transmit\n        hardware-receive\n        software-receive\n        software-system-clock\n        hardware-raw-clock\nPTP Hardware Clock: 0\nHardware Transmit Timestamp Modes:\n        off\n        on\nHardware Receive Filter Modes:\n        none\n        all\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eF. Verify testptp works:\u003c\/strong\u003e\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo testptp -d \/dev\/ptp0 -l\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003eShould see:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003ename SDP0 index 0 func 0 chan 0\nname SDP1 index 1 func 0 chan 0\nname SDP2 index 2 func 0 chan 0\nname SDP3 index 3 func 0 chan 0\u003c\/code\u003e\u003c\/pre\u003e\u003chr\u003e\u003ch3\u003eConfigure 1PPS Output\u003c\/h3\u003e\u003cp\u003eSetup SDP0 (SMA1, furthest from PCIe fingers, above RJ45) as periodic output:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo testptp -d \/dev\/ptp0 -L0,2\nsudo testptp -d \/dev\/ptp0 -p 1000000000\u003c\/code\u003e\u003c\/pre\u003e\u003chr\u003e\u003ch3\u003eRead 1PPS SMA Input\u003c\/h3\u003e\u003cp\u003e\u003cstrong\u003eA.\u003c\/strong\u003e Setup SDP1 (SMA2, below RJ45) as timestamp input:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo testptp -d \/dev\/ptp0 -L1,1\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eB.\u003c\/strong\u003e Read timestamps. Use \u003ccode\u003e-1\u003c\/code\u003e to read forever and \u003ccode\u003ectrl+C\u003c\/code\u003e to stop; using 5 here as a demo.\u003c\/p\u003e\u003cp\u003e\u003cem\u003eNote: The I226 driver passes both rising and falling edges to Linux. A fix requiring a kernel patch is documented on the GitHub repo.\u003c\/em\u003e\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo testptp -d \/dev\/ptp0 -e 5\u003c\/code\u003e\u003c\/pre\u003e\u003chr\u003e\u003ch3\u003eDiscipline to 1PPS SMA Input\u003c\/h3\u003e\u003cp\u003e\u003cem\u003eNote: For best results, install the PPS input kernel patch fix first (see GitHub).\u003c\/em\u003e\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eA.\u003c\/strong\u003e Verify PPS input on SMA2 using the testptp steps above.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eB.\u003c\/strong\u003e Set NIC PHC based on system time to get Time-Of-Day:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo phc_ctl enp1s0 \"set;\" adj 37\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eC.\u003c\/strong\u003e Use ts2phc to discipline NIC from 1PPS:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo ts2phc -c \/dev\/ptp0 -s generic --ts2phc.pin_index 1 -m -l 7\u003c\/code\u003e\u003c\/pre\u003e\u003chr\u003e\u003ch3\u003eFix 1PPS Input to Only Use Rising Edge (Advanced)\u003c\/h3\u003e\u003cp\u003eFull instructions are on the \u003ca href=\"https:\/\/github.com\/Time-Appliances-Project\/TimeNIC\" target=\"_blank\"\u003eTimeNIC GitHub repo\u003c\/a\u003e (easier to read and follow there).\u003c\/p\u003e","brand":"Time Appliances","offers":[{"title":"Default Title","offer_id":43792166682698,"sku":null,"price":225.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0718\/3210\/9130\/files\/2025-04-10T21_20_19.268Z-IMG_2637_061e2f6d-b52d-4212-b184-6de14925776d.jpg?v=1783470998","url":"https:\/\/timeappliances.myshopify.com\/products\/timenic","provider":"Time Appliances","version":"1.0","type":"link"}