{"product_id":"raspberry-pi-5-pcie-hat-with-i226-nic-timehat","title":"Raspberry Pi 5 PCIe HAT with I226 NIC (TimeHATv6)","description":"\u003ch2\u003eRaspberry Pi 5 PCIe HAT with I226 NIC — TimeHAT\u003c\/h2\u003e\u003cp\u003eThe TimeHAT brings precision timing and advanced network functionality to the Raspberry Pi 5. Leveraging the PCIe interface via an FPC connection, it integrates a high-performance Intel I226 Ethernet NIC, precise timing inputs and outputs via SMA connectors, and a GNSS module slot for global time synchronization. It's a powerful tool for building small form-factor PTP (Precision Time Protocol) clients — ideal for time-sensitive networking applications.\u003c\/p\u003e\u003chr\u003e\u003ch3\u003eWhat's in the Box\u003c\/h3\u003e\u003cul\u003e\n\u003cli\u003eTimeHAT\u003c\/li\u003e\n\u003cli\u003e40-pin spacer\u003c\/li\u003e\n\u003cli\u003e16-pin FPC PCIe cable\u003c\/li\u003e\n\u003cli\u003eSpacers, nuts, and screws for mounting to Raspberry Pi 5\u003c\/li\u003e\n\u003c\/ul\u003e\u003chr\u003e\u003ch3\u003eKey Features\u003c\/h3\u003e\u003ch4\u003eI226 Ethernet NIC\u003c\/h4\u003e\u003cp\u003eThe HAT features an Intel I226 NIC connected to the Raspberry Pi 5 over the PCIe interface, delivering fast, reliable Ethernet connectivity — perfect for applications requiring high-speed networking combined with precise timing.\u003c\/p\u003e\u003ch4\u003ePrecision Timing via SMA Ports\u003c\/h4\u003e\u003cp\u003eTwo SMA connectors provide timing signal input and output:\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eSMA Input (SDP1 on I226):\u003c\/strong\u003e Receive a 1PPS (one pulse per second) signal to discipline the NIC's internal clock.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSMA Output (SDP0 on I226):\u003c\/strong\u003e Output a 1PPS signal from the NIC to synchronize external equipment or measure precise time intervals.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSpare U.FL (SDP3 on I226):\u003c\/strong\u003e Raw unbuffered connection usable as input or output. \u003cem\u003eWarning: This is also a strapping pin on the I226 — connecting it at boot may affect Ethernet functionality.\u003c\/em\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\u003cp\u003eThese features enable the HAT to act as either a \u003cstrong\u003ePTP client\u003c\/strong\u003e or a \u003cstrong\u003ePTP grandmaster\u003c\/strong\u003e.\u003c\/p\u003e\u003ch4\u003eOCP M.2 GNSS Slot (2242 Form Factor)\u003c\/h4\u003e\u003cp\u003eAn M.2 slot designed for OCP-compliant GNSS modules adds satellite-based time synchronization to your Pi:\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eUART Connection:\u003c\/strong\u003e The GNSS module communicates with the Pi via the standard HAT header.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e1PPS from GNSS to SDP2 on I226:\u003c\/strong\u003e The GNSS 1PPS signal connects directly to the NIC, enabling GPS-disciplined timekeeping — essential for a reliable grandmaster clock.\u003c\/li\u003e\n\u003c\/ul\u003e\u003ch4\u003eBuilt-in TCXO\u003c\/h4\u003e\u003cp\u003eA high-precision Temperature-Compensated Crystal Oscillator (TCXO) ensures timing stability even during network loss, and allows tighter disciplining parameters to reduce PTP timing jitter. Stability: ±280 ppb across temperature.\u003c\/p\u003e\u003chr\u003e\u003ch3\u003eApplications\u003c\/h3\u003e\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003ePTP Client or Grandmaster:\u003c\/strong\u003e Synchronize network devices with sub-microsecond accuracy.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eGNSS Disciplined Clock:\u003c\/strong\u003e Build a highly accurate, satellite-synchronized clock.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e1PPS Signal Measurement:\u003c\/strong\u003e Measure and verify 1PPS signals for precise timekeeping.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eEdge Networking:\u003c\/strong\u003e Deploy in edge computing environments where precise timing is critical.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHome Labs:\u003c\/strong\u003e Create a PTP client network for your home lab with ease.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eIoT Gateways:\u003c\/strong\u003e Build precise IoT gateways with synchronized time across devices.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eResearch \u0026amp; Development:\u003c\/strong\u003e Experiment with PTP, GNSS, and timing protocols in various network configurations.\u003c\/li\u003e\n\u003c\/ul\u003e\u003chr\u003e\u003ch3\u003eResources\u003c\/h3\u003e\u003cul\u003e\n\u003cli\u003e\n\u003ca href=\"https:\/\/github.com\/Time-Appliances-Project\/TimeHAT\" target=\"_blank\"\u003eTimeHAT GitHub Repo\u003c\/a\u003e — discussions, issues, and setup documentation\u003c\/li\u003e\n\u003cli\u003e\n\u003ca href=\"https:\/\/github.com\/geerlingguy\/time-pi\" target=\"_blank\"\u003eJeff Geerling's time-pi GitHub Repo\u003c\/a\u003e — community resources related to this product\u003c\/li\u003e\n\u003c\/ul\u003e\u003chr\u003e\u003ch2\u003eSetup \u0026amp; Usage Guide\u003c\/h2\u003e\u003ch3\u003ePre-Setup Steps\u003c\/h3\u003e\u003cp\u003e\u003cstrong\u003eA. Install linuxptp\u003c\/strong\u003e\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo apt install linuxptp\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. 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\u003epi@raspberrypi:~\/testptp $ sudo testptp -d \/dev\/ptp0 -l\nname 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\u003cp\u003e\u003cstrong\u003eFix 1PPS input to only use rising edge (New Method, much easier)\u003c\/strong\u003e\u003cbr\u003eProcedure documented on GitHub: \u003ca href=\"https:\/\/github.com\/Time-Appliances-Project\/TimeHAT\" target=\"_blank\"\u003ehttps:\/\/github.com\/Time-Appliances-Project\/TimeHAT\u003c\/a\u003e\u003c\/p\u003e\u003chr\u003e\u003ch3\u003eConfigure 1PPS Output\u003c\/h3\u003e\u003cp\u003e1. Setup SDP0 (SMA1, closest to HAT header) 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, furthest from HAT header) 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 edges to Linux, so both rising and falling edges will be listed. A fix for this is listed below and requires patching and building the kernel.\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\u003eProcedure documented on GitHub: \u003ca href=\"https:\/\/github.com\/Time-Appliances-Project\/TimeHAT\" target=\"_blank\"\u003ehttps:\/\/github.com\/Time-Appliances-Project\/TimeHAT\u003c\/a\u003e\u003c\/p\u003e\u003chr\u003e\u003ch3\u003eAccess GNSS UART\u003c\/h3\u003e\u003cp\u003e\u003cstrong\u003eA.\u003c\/strong\u003e Enable UART (but not serial console) for Raspberry Pi. Use raspi-config: \u003cem\u003e3. Interface Options → I6 Serial Port\u003c\/em\u003e\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo raspi-config\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003eLogin shell → No\u003cbr\u003eSerial port hardware → Yes\u003cbr\u003eFinish\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003ereboot\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eB.\u003c\/strong\u003e Once rebooted, link GNSS UART to a ttyS name for tools to use:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo ln -s \/dev\/ttyAMA0 \/dev\/ttyS10\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eC.\u003c\/strong\u003e Simple serial check using tio (use \u003ccode\u003ectrl+t q\u003c\/code\u003e to quit):\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003etio -b 38400 \/dev\/ttyS10\u003c\/code\u003e\u003c\/pre\u003e\u003chr\u003e\u003ch3\u003eUse gpsd \/ cgps to See GPS Status\u003c\/h3\u003e\u003cp\u003e\u003cstrong\u003eA.\u003c\/strong\u003e Install gpsd and cgps:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo apt-get install gpsd gpsd-clients\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eB.\u003c\/strong\u003e Configure gpsd to point to \u003ccode\u003e\/dev\/ttyAMA0\u003c\/code\u003e, the GNSS UART:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo vim \/etc\/default\/gpsd\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eC.\u003c\/strong\u003e Add \u003ccode\u003e\/dev\/ttyAMA0\u003c\/code\u003e to GPSD_OPTIONS and set baud rate:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003eGPSD_OPTIONS=\"\/dev\/ttyAMA0 -s 38400\"\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eD.\u003c\/strong\u003e Enable gpsd on startup:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo systemctl enable gpsd\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eE.\u003c\/strong\u003e Start gpsd now:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo systemctl start gpsd\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eF.\u003c\/strong\u003e Use cgps to see GPS status (use \u003ccode\u003ectrl+c\u003c\/code\u003e to exit):\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo cgps\u003c\/code\u003e\u003c\/pre\u003e\u003chr\u003e\u003ch3\u003eUse pygpsclient to See GPS Status (Requires Monitor)\u003c\/h3\u003e\u003cp\u003e\u003cstrong\u003eA.\u003c\/strong\u003e Install pygpsclient (\u003ca href=\"https:\/\/github.com\/semuconsulting\/PyGPSClient?tab=readme-ov-file#installation\" target=\"_blank\"\u003einstallation docs\u003c\/a\u003e):\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003epython3 -m pip install --upgrade pygpsclient\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eB.\u003c\/strong\u003e Run pygpsclient from terminal:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003epygpsclient\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eC.\u003c\/strong\u003e Select \u003ccode\u003e\/dev\/ttyS10\u003c\/code\u003e as the serial port, set baud rate to \u003ccode\u003e38400\u003c\/code\u003e, then click the USB\/UART button.\u003c\/p\u003e\u003chr\u003e\u003ch3\u003eAutomatic Discipline to GNSS Module (Including TOD)\u003c\/h3\u003e\u003cp\u003eProcedure is documented on GitHub: \u003ca href=\"https:\/\/github.com\/Time-Appliances-Project\/TimeHAT\" target=\"_blank\"\u003ehttps:\/\/github.com\/Time-Appliances-Project\/TimeHAT\u003c\/a\u003e\u003c\/p\u003e\u003cp\u003eAfter setting this up, the NIC PHC will be automatically updated by the GPS when available, and \u003ccode\u003ecgps\u003c\/code\u003e can be used to monitor the GPS. This is the recommended method for setting up TimeHAT with GPS to discipline the NIC.\u003c\/p\u003e\u003chr\u003e\u003ch3\u003eManual Discipline to 1PPS from GNSS Module\u003c\/h3\u003e\u003cp\u003e\u003cem\u003eNote: To have this work properly, you'll need to install the PPS input fix (see GitHub).\u003c\/em\u003e\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eA.\u003c\/strong\u003e Install the GNSS module and make sure it's locked. You should see a blinking LED on the M.2 module when 1PPS is being generated.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eB.\u003c\/strong\u003e Enable PPS input on GNSS → I226 SDP2 pin:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo testptp -d \/dev\/ptp0 -L 2,1\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eC.\u003c\/strong\u003e Set NIC PHC based on system time to get Time-Of-Day:\u003c\/p\u003e\u003cpre\u003e\u003ccode\u003esudo phc_ctl eth1 \"set;\" adj 37\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e\u003cstrong\u003eD.\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 2 -m -l 7\u003c\/code\u003e\u003c\/pre\u003e","brand":"Time Appliances","offers":[{"title":"Default Title","offer_id":43792143024202,"sku":null,"price":220.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0718\/3210\/9130\/files\/2025-07-03T15_26_39.497Z-thumbnail_IMG_3096.jpg?v=1783471054","url":"https:\/\/timeappliances.myshopify.com\/products\/raspberry-pi-5-pcie-hat-with-i226-nic-timehat","provider":"Time Appliances","version":"1.0","type":"link"}