QND OF PHOTONS (QND-P), HOST PROTOCOLS Started June 2010 by Alan Stummer, astummer_at_physics.utoronto.ca WARNING: THIS FILE IS SUPERCEDED BY THE INFORMATION ON THE QND HOME PAGE. RAISON D'ETRE ============= The QND-P detects photons without destroying them by detecting an absurdly small and short phase shift in an RF signal. MODUS OPERANDI ============== A pulse laser generates a single photon. A CW probe laser is amplitude modulated at 20-80MHz. Both the laser and photon intersect in an atomic cloud. Hopefully, the photon interacts with the cloud and delays the probe by decreasing the propogation velocity. The phase shifted probe is detected by a photodiode (PD). When the pulse laser pulses, it sends a trigger signal to the unit. Upon receipt of the trigger, the ADC takes a short series of measurements of the PD. These measurements are collected in the FPGA until its memory is full, then the microcontroller downloads them and sends them via UDP/IP to the host. DATA DEMYSTIFIED ================ BLOB: All of the data sent from the unit to the host, when sent a Run command. The blob is broken up into packets. PACKET: The payload of an ethernet packet. Each packet has data from 69 triggers and is 1384 bytes long (MTU). TRIGGER: Every time a photon is received, the APD sends a trigger pulse to the unit and the unit makes 10 ADC measurements. ADC: Analog to Digital Converter. The ADC is 16-bit, of which about 12 are useful (ENOB). The ADC is synchronous to the laser's FM modulation. PACKETS PER BLOB: 7 TRIGGERS PER PACKET: 69 ADC SAMPLES PER TRIGGER: 10 ADCS PER PACKET: 690 ADC BYTES PER SAMPLE: 2 ADC BYTES PER PACKET: 1380 PACKET HEADER SIZE: 4 BYTES PER PACKET: 1384 COMMANDS FROM HOST COMPUTER TO MICROCONTROLLER ============================================== Cmd Description ---- ----------------------------------------------------------- "X" Reset: stop running, clear data. "R" Run, send data blob to host when collected, stop. Unit resets itself before running. "H" Heartbeat, just to say host is still connected. Rabbit will echo it. "V" Read Dynamic C and Verilog version numbers. "T" Test data: same as 'R' but overflow is 0x5A, ADCs are 0x0001, 0x0002 ... TRAFFIC FROM MICROCONTROLLER TO HOST COMPUTER ============================================= 1st byte Size Description ---- ---- ----------------------------------------------------------------------------------- "H" 1 Heartbeat: echoing "H" command to say unit is alive and well and living in Toronto. "D" 1 Done. FPGA has run, collected data, transferred it to micro, micro sent it to host. "V" 15 Version numbers: [1] "V" as data header. [2] FPGA version byte (4 MSB version, 4 LSB revision). [3] C version string, first byte. ... " " , next byte. [15] " " , last byte. "R" 1,384 Data collected: [1] "R" as data header [2] LS of data packet number [3] MS of data packet number [4] ADC overflow counter (capped at 255) [5] Trigger 1, LS byte of ADC[1] [6] Trigger 1, MS byte of ADC[1] ... [1,383] Trigger 69, LS byte of ADC[10] [1,384] Trigger 69, LS byte of ADC[10] Note that host command "T" returns "R" packets but with fixed data.