WHAT IS PROGRAMMING?
Programming is the act of configuring your decoder (Mobile or accessory) with predetermined customized information that will be used to tell the decoder what to do with the information it is processing. By far the most important customization information all decoders need to have programmed into them is their DCC address. But there are lots of other pieces of information that a decoder needs to know related to motor control, light and sound effects.
PROGRAMMING's COMMON DATA FORMAT
The customization data that is to be passed back and forth between the decoder and the command station is done using 1 Byte "chunks" of data. A byte is a common computer term used to describe a group of 8 binary bits. The 8 bit collectively that make up the 1 Byte can represent up to 256 unique decimal values ranging from 1 to 255.
TWO PHYSICAL FORMS OF PROGRAMMING
There are two type of decoder programming defined by the NMRA DCC standards.
1) Operations Mode. Most people know this as "Programming On the Main" AKA "Ops Mode" or "POM" mode.
To learn more about the detail of how Operations Mode programming works, go here: Operations Mode
2) Service Mode. Most people know this as "Programming Track mode".
To learn more about the details of how Service Mode programming works, go here: Service Mode
WHAT ARE THE DIFFERENCES BETWEEN THE TWO MODES?
Ops mode is ONE WAY communication to the decoder that uses DCC track power. You cannot read any values from the decoder. You are blind. It is a case of "program and pray" the decoder gets the data. Results can only be verified by testing the locomotive for the change you made. You can program any type of decoder connected to DCC track power that is located anywhere on the layout at any time. From a user perspective, you must first know the locomotive's DCC address to be able to program the decoder. The programming mode is decoder specific. Without the address, you cannot change anything.
Service Mode is TWO WAY communication with the decoder that must be done under special setup circumstances. You can read value from the decoder and verify what you sent. From a user perspective, you DO NOT NEED TO KNOW the locomotive's DCC address to be able to program the decoder. The programming mode is global. You can take any locomotive at any time and program it regardless of it history including what DCC address it has. In addition, Service mode provides "electrically safe" DCC power such that a decoder with a short circuit or mis-wiring will not be damaged. It protects your decoder that would otherwise potentially burn up on the main line. No smoke. This is the best way to test older "Pre-DCC" engines that were never "DCC READY" that required a lot of work to install a decoder.
WHAT ARE "SERVICE MODE" SPECIAL SETUP CIRCUMSTANCES?
Service mode is very powerful since no decoder addresses is used to qualify who gets the programming commands. They are global commands. Any decoder that sees a service mode programming command MUST ACCEPT IT and ACT ON IT. So if you have multiple engines on the track and you only intended to program just one of the locomotives, like it or not they ALL WILL GET PROGRAMMED with the same customization values. The locomotive you intended to program will accept the value and run fine. However, the other locomotives may not anymore. Stated another way, sending programming track command to the layout will program all the locomotive on the layout. So you must take proactive steps to protect the locomotive you do not intend to program to keep them safe before you attempt to do any programming. The exact steps you need to take will vary with the DCC system used.
There are two physical formats that a given DCC system can implement the programming track capabilities.
1) Dedicated Programming Track Terminals.
These DCC system have two sets of track terminals. One set for running the Layout and another set specifically for Service Mode that directly power an electrically isolated section of track. This latter set of terminals is were the expression "Programming Track" came from. You do not need to remove any locomotives off the layout and have the flexibility of locating the programming track anywhere you need it to be including off the layout such as on a test bench. It is the most convenient and straight forward way to install a flexible programming track. However it comes at a price. DCC systems that implement a set of dedicated programming track terminal are typically the most advanced DCC systems.
2) Common Track Terminals.
These DCC system require you to remove all of the locomotives off the layout that you do not want to program. This is found in lower cost mid range DCC systems. Unfortunately these system offer the greatest chance of reprogramming all you locomotives by mistake. It has happened. Fortunately, your not stuck with this setup. For additional cost, there are DCC devices out there that can accept these common track terminals and electrically split it up into a dedicated set programming track terminals and layout track terminals just like the high end systems.