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][0110][bbbb<bbbb><bbbb>]

[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.

Channel_Indicator

“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.

RemoteSettingExample

The following are three more examples.

RemoteSetting

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:

[Channel][bbbb]

“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.

Pre_Flash

Final flash amount command

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

[Channel][0101][bbbbbbbb<bbbbbbbb><bbbbbbbb>]

“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.

ManualOutputAmount

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.

OutputAmount

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.

[Channel][0111][bbbbbbbb<bbbbbbbb><bbbbbbbb>]

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

[Channel][0111]

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.

[Channel][1101][mmmm][bbbbbbbb<bbbbbbbb><bbbbbbbb>]

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

Comments

  • http://russmacdonaldphotos.com Russell MacDonald

    Great information! I’m looking forward to the rest of the study.

    One thing I still can’t understand is, when there are multiple groups, when are the preflashes analyzed by the camera?

    Does the camera analyze all the data from the various groups at the same time, or does it analyze each group individually without reguard for the other groups?

    Thanks!

    Russ

    • http://dptnt.com/ picmax

      Russell,

      I am not sure at this point. I need to conduct some more tests. If I can decode the final output amount data, the conclusion will be obvious.

      Thanks.

      Max

    • http://dptnt.com/ picmax

      Russ,

      Perhaps the 4th post of the series can answer your question.

      http://dptnt.com/2009/11/nikon-cls-advanced-wireless-lighting-part-iv/

      Max

  • GrzesiekN

    My English is very poor, but informations will be very usefull :) Because transmission is flash dependent, pulse width has no meaning. Only egde of single pulse can be detected. Channel (header in my opinion) is coded by two first impuls as follow:
    CH1: 150us,225us (us meaning microsecond)
    CH2: 255us,150us
    CH3: 255us,225us
    CH4: 150us,350us
    Rest of transmission has diffrent coding method. Pulse is always multipy of 150us. What this mean? If pulse length:
    150us binary result is [1], 300us [10], 450us [100], 600us [1000] …

    • http://dptnt.com/ picmax

      My understanding is the same. What matters is if there is a pulse at given time interval, not the width of the pulse itself.

      Ch 4 is more like 150us, 375us, i.e. 1x, and 2.5x.

      Thanks for your comment.

      Max

  • Ale

    I read with great interest your post because I’m trying to build a radio system like RadioPopper o PW. You can read about it in this forum:

    http://www.nikonclub.it/forum/index.php?showtopic=109131

    I apologyze, is in italian language but images speak itself. Now my question: are you sure that the bit period is 150 Us? If so why in your pictures in a millisecond can I see more than 6 pulse? (if 150 us is the period the bit rate must be 6.6Kbit/sec). I placed these questions because I’m oversampling at 38.4 Kbit/sec but some time I have a fault.

    Thank you for yor study.

    Alessandro

    • http://dptnt.com/ picmax

      Ale,

      Fantastic project. I am pretty sure the period is about 150 microseconds. I don’t see what you said about more than 6 pulses within 1 ms.

      Please note the light pulse itself is only about 70us wide. Your 38.4kbit/sec sampling rate means you are sampling every ~26us. However you are using inductive sampling, which means it only detect changes in magnetic field. So perhaps you are looking at rising or falling edge of the pulses. The signal width is likely much narrower.

      Max

      • Ale

        Max,

        thank you for your answer, the 3rd picture in part 1 had fooled me. Now I understand and I will try to place the pulse every 150 microsecond.

        Ale

  • Soker

    comment to “Final flash amount command”
    “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?.” – this is not true:)
    There missed one zero: CMD=0010 (not 0101) and when Group A is off, the master sending 10000000. This table is not correct. Example: for flash power 1/1-10000000, 1/1.3-10000010, 1/1.7-10000100, 1/2-10000110, 1/2.5-10001000… 1/128-10101010
    (sorry for my english)

  • kkjensen

    Good stuff…go ahead and ignore my comment Part 2 since you’ve done it here…