It is difficult to determine when the accessory shoe first appeared on Nikon SLR cameras. The very early ones might be a simple “cold shoe”, which could hold a flash but the triggering signal was sent via additional cable between flash and camera. You could fine one like that on a Nikkorex F (1962). Later, the electrical connections were made within the shoe. That’s when it became “hot” and was called “hot shoe”.
On the Nikormat EL (introduced 1973), the first Nikon SLR with fully automatic exposure, there was a single contact that looks like the X-sync contact. It worked with the SB-2 and SB-3 that were introduced a year earlier. The legendary Nikon F3 added a extra contact for flash ready light. The current Nikon hot shoe interface was probably first seen on Nikon FG (1982) and later on Nikon F4 when TTL flash function was implemented. Even though the physical dimensions and contact arrangements remained the same, the functions of the contacts have changed over time. The function description of the contacts for old Nikonos and Nikon film SLR cameras can be found here. On fairly recent flashes such as the Nikon SB-800 and SB-600, the old cameras are still supported but when the flash is mounted on the latest digital SLR camera, the signals going through the contacts are quite different.
After decoding the optical communication protocol of Nikon’s Advanced Wireless Lighting (AWL), I simply followed my curiosity and tried to decode the electrical communication between a Nikon D200 and Nikon SB-800.
First, by measuring the voltages of the contacts on flash and on camera, I found them either near 0 or at ~3.6-5V. So the Nikon camera/flash system operates with standard TTL voltages. To capture the communication, I need to physically tap into the hot shoe connections. I could have cut a TTL cord for that but I found the Pixel TF-322 hot shoe converter a nice fit for the purpose. I removed the PC sync port and soldered a few fires through the hole to the contacts.
It worked quite well and I was able to understand a good portion of the communication going on between the camera and flash. Before going further, here is the the Nikon TTL flash shoe interface. Symbols in parentheses are for old TTL functions.
The following is an example of a Nikon D200 talking to SB-800 captured using a logic analyzer. The flash was in idle mode sitting on the hot shoe. Then the camera was turned on, which woke the flash from idle mode. After some unique initial data communication sequences, the same data communication sequence starts to get repeated every ~50 milliseconds until the camera and flash goes into idle mode again.
Here is the zoomed-in view of the details.
On the Clock line, there are bunches of very regular pulse groups. In each of them, the signal goes to logic low 8 times. Each clock period is 32 microseconds. On the Handshake line, the signal remains low during the entire time period of the 8 pulses on the Clock line. The Data line has irregular pulses that appear to be the actual data. Obviously this is some form of serial communication, probably a 3-wire SPI.
To decode the actual data on the Data line, I needed to know if the data is sent least significant bit (LSB) first or most significant bit (MSB) first. The former assumption makes most sense because the last byte of the transmission string appears to be a simple checksum that only only adds up if LSB is sent first.
When the camera and flash start to talk, the communication always follows this pattern.
0xA1 + 18 bytes, 0XB1 + 10 bytes, 0xB0 + 15 bytes, 0xA0 + 22 bytes, 0xA2 + 46 bytes, 0xB0 + 15 bytes, 0xA0 + 22 bytes, ... Repeat of "0xB0 + 15 bytes, 0xA0 + 22 bytes" every ~50ms.
Different data show up when the settings on flash or camera are changed. Extra data show up when a photo is taken. By observing each data change corresponding to each settings change or photo-taking process, the meaning of the bytes and bits can be decoded to a certain degree. There are some values that do not change no matter what I did on the camera or flash. The meaning of those bytes cannot be decoded. Basically, the bytes that follow 0xB0 are communication from camera to flash and the bytes after 0xA0 are communication from flash to camera. The bytes after 0xA1 and 0xA2 are specific to the flash unit and the bytes after 0xB1 are specific to the camera. Perhaps the camera and flash are exchanging some basic informations that are not user changeable since they were sent only once at startup or wakeup. SB-600 has a different set of data after 0xA1 and 0xA2. Quantaray QDC 900WA is a cheap flash that is Nikon iTTL compatible. It has the exact same bytes after 0xA1 and 0xA2 as Nikon SB-800. Perhaps Quantarary simply cloned the information from Nikon SB-800 since there is no easy way to decode the data.
Other interesting information can also be easily obtained. For example, “0xD7″ is the command to do the pre-flash. “0XD8, 0×18″ is the 2nd pre-flash (High) command. The amount of the flash output is sent in the format of “0xD3, 0xMM, 0xNN, 0xD3″. The flash still fires upon lowering of the X-sync contact to 0 but it doesn’t stop by waiting on the Quench (now Data) contact to go to 0.
For me, the ultimate goal is to create some DIY wireless flash triggers because the available options are either too expensive or feature-limited. So I need to create a wireless receiver that can control the flash by pretending it is a compatible camera and a wireless transmitter device that can emulate a flash when sitting on top of the camera. In order to do that, a deeper understanding of the Nikon camera-flash communication is required. Since the communication is half-duplex, it is not obvious which side toggles the logic levels of each contacts at any given time by examining with a logic analyzer. There are some tricks I had to use and time consuming tests I had to perform to figure it out. Those details are more related to The Art of Electronics than the Art of Photography so I will not include them here on a photography blog.
Keywords: Contacts, Flash photography, Interface, iTTL, Nikon, Pinout, Protocol, TTL



























Fascinating stuff. I’ve been reading your analysis of the CLS flash signalling too, and I can feel an arduino project coming on
Yes, a few are in-progress and a few more are coming.
I like where you are going with this. I still have to look into the electronics side of this, but what if you were to take a SC-28 and cut it into 2 pieces. The camera side would be wired into a cheap 22 channel walkie talkie, then the side with the hot shoe would be wired into the 2nd walkie talkie.
The only problem I can see so far is multiple signals at the same time, but if you can find a way to do multiple channel broadcasts, this should take care of it.
but if you don’t mind just setting your flash to manual, then you should only have to work out the trigger signal.
Jamie,
Good thinking… There are many very inexpensive RF modules available on the market today that cost about $2-5. So I definitely don’t need to rig up a walkie talkie.
Max
True, however I’m working on way to do this where I can just send my friends something that plugs into the headset jack of the walkie talkies, (For people who don’t have the first clue about electronics.) I’ll will be back to keep reading how everything is coming along. I was a electronics tech when I was in the Marines, and now I do IT work, and wedding photography. However I have only been shooting for about 9 months now.
By the way, what bodies are you using? I’m working off both a D40 (500 sync kicks ass), and a D90.
I am using D200.
Hey picmax, this is exactly the data I have been looking for. I have a D70, a couple of different i-TTL speedlights, and a USBee ZX protocol analyzer. Would love to help out with your project if I can lean on you for the protocol data you’ve already decoded.
Jeffrey, with what you have, you are likely at a better position to work on it. I have very poor documentation with what I have learned so far. It will probably take a while for me to get it organized and published.
Max