title: What do the CANopen STORE and RESTORE objects do?
body: <p>The CiA 301 CANopen protocol specification defines two objects that a device may implement to save and restore parameters:</p>
  
  <p><strong>Object 1010h - <code>Store Parameters</code></strong></p>
  
  <p>When a device implements this object, the CANopen master writes the value "save" to one of the subentries of the object to cause the corresponding set of parameters to be written to non-volatile memory.</p>
  
  <p><strong>Object 1011h - <code>Restore Default Parameters</code></strong></p>
  
  <p>When a device implements this object, the CANopen master writes the value "load" to one of the subentries of the object to restore the corresponding default parameters to be restored.</p>
  
  <p><strong>Device Reset</strong></p>
  
  <p>The CiA 301 specification says that "default values shall be set valid after the CANopen device is reset" - by way of a power cycle, NMT reset node (sub-index 01h to 7Fh) or NMT reset communication (sub-index 02h).</p>
  
  <p><strong>What are 'the default values'?</strong></p>
  
  <p>Does "the default values" mean:</p>
  
  <ul>
  <li>The values set by the <code>Store Parameters</code> object?  In which case, how can the device be reset to the original factory default settings?</li>
  <li>The original factory default settings?  If so, when should the saved parameters be restored?</li>
  <li>A combination of the above, whereby the factory default settings are restored by a device reset, and the <code>Store Parameters</code> values are restored by the <code>Restore Default Parameters</code> object?</li>
  <li>Some other definition?</li>
  </ul>
  
  <p>I understand the mechanisms for reading from the objects to obtain the device capabilities and writing the guard pattern to them to trigger the required action.  I also know which values to save and which subsets to save for the different sub-indeces.</p>
  
  <p>The thing I do not understand is when should the factory default values be used (if at all) rather than the saved values, and vice versa?</p>