In the first two parts (Part I, Part II) of the Nikon CLS Advanced Wireless Lighting series, I have showed many examples of the pulse communication sequences but didn’t go into details about them. In part III, I will discuss the detailed coding scheme used by Nikon CLS Advanced Wireless Lighting system.

From the previous examples we know that there are several command types the master flash unit emits to control the remote flash units. To avoid interference, the optical pulse sequences start with a channel indicator so only remote flash units belong to the specified channel react to the commands. This channel indicator always contains 3 pulses. After examining the distances between pulses, I found that all the distances are results of a unit distance multiplied by integers, except for the channel indicator pulses, which contains 1x, 1.5x, and 2.5x unit distances between pulses. It appears that the optical wireless communication uses a hybrid coding scheme. After the channel indicator, the pulses confirm to simple binary format, pulse for “1”, no pulse for “0”. So it is quite easy to figure out what’s going on. 😉

Remote (group) setting command

This is the command the master sends to setup the remote flashes. It has the following format:


[Channel] is always indicated with 3 pulses. The following shows the pulse configurations for Channel 1-4. The same channel indicator also goes in front of the pre-flash and flash output amount signal transmissions.


“0110” is the command code for the remote setting. “bbbb” represents a 4-bit binary code for the modes. There are four modes available: Off (1000), TTL (1001), AA (1010), and M (1011). If there are more than one groups configured, the 4 bit codes representing the modes are simply concatenated together. The following is an example for Ch #1, Group A in M mode, Group B in TTL mode.


The following are three more examples.


If there is only Group A configured (it can be in any mode except off, or “–“), the master unit will not explicitly set Group B (and C to off). However if Group A is off but Group B is on, the master needs to explicitly say so to avoid confusion.

Pre-flash command

This command is used to instruct a particular remote group to emit the pre-flash (upon receiving the pre-flash trigger). It has the following format:


“bbbb” is the 4 bit code representing a specific group. Only three groups are supported: A (1001), B (1010), and C (1011). After this command, the master unit sends out the pre-flash trigger (a simple double pulse). If the camera doesn’t detect sufficient reflected light, it will ask for a 2nd pre-flash with another pre-flash trigger (double pulse). Upon receiving it, the remote unit(s) in the specific group should fire a stronger pre-flash. The process is repeated for all groups that need to do pre-flash, including all groups in TTL and AA modes.

The following are two examples.


Final flash amount command

This command is used to tell all remote groups how much light they should emit. It has the following format:


“bbbbbbbb” is 8-bit binary number. The amount data for multiple groups are concatenated together. If there is just one group, the number may be shorter than 8 bit since zero bits are not transmitted. However if there are more then one group configured, the amount data for the first group(s) is always 8 bit (padded with dummy bits).

For manual mode, the code format for each output level is shown below.


For TTL mode, the amount data should be a guide number (GN). I didn’t attempt to decode it yet.

The following are three examples.


When Group A is off, the master will basically wait for the time it needs to transmit 8 bit of data before sending the Group B output amount data. You can say it sends “00000000”.

After sending the amount data, the camera then sends a final flash trigger (a single pulse). The remote unit should emit the specified amount of light at that time. Again, the remote units won’t sit and wait forever, it will time-out if the final trigger doesn’t arrive for some reason.

Special case #1

The details above should cover typical uses of Nikon CLS Advanced Wireless Lighting System. One exception is in Rear Curtain sync mode with shutter speed slower than 1/2. The communication sequences are slightly more complicated. The command code for final flash amount is “0111”, instead of “0101” for typical cases.


The 2nd difference is the final flash trigger. It is no longer just a single pulse, but a command like the following:


The remote flash fires the final flash after a short period of delay after receiving the command, before the shutter is closed on the camera. The reason for the elaborate scheme is to make accurate flash syncing possible when the exposure time is long and individual flash units may have slightly slower or faster timers. One other benefit of using a complex command as the trigger is to avoid mis-firing caused by fireworks or other stray lights that may happen during a long exposure. With a Rear Curtain and short exposure or Front Curtain mode, using a simple single pulse trigger is not a problem.

Special case #2

Another special case is the FP high speed sync that allows you to use shutter speed up to the fastest shutter speed available on the camera. It has yet another different format for the final flash output amount command.


The command code for flash output amount command in FP sync mode is “1101”. There are extra 4 bits (“mmmm”) before it sends the actual flash output amount. For shutter speed <1/500s, the code is 1011. For shutter speed > 1/500s, it is 1100. I have not figure out the meaning of the extra bits.

Phew…the boring part is finally over. If you find this interesting, great. If not, we will actually see some photos taken in the next part.

To be continued…

Related Posts