Repository navigation
Common Issues
- Either it is not installed on the server → install the library
- Or oscillatord is not able to find the dynamic library when startting
- call oscillatord with Environnement variable LD_LIBRARY_PATH=<path_to_libraries.so> (usually something like /usr/local/lib or /usr/local/lib64)
Check oscillator_factory_settings is always set to true to use factory parameters and false to use user parameters
CMake not finding a library when doing cmake .. → call cmake with environnement variable PKG_CONFIG_PATH=<path_to_library’s_pc file> (check where the library has installed its pc file when doing sudo make insstall)
- 10:12:53 ERROR PTP_EXTTS_REQUEST enable
- 10:12:53 ERROR Could not enable ART internal pps external events
- PTP Clock passed in config file is not the one of the card
If EEPROM has been corrupted, minipod will be able to handle it and use factory parameters hardcoded in the program, but it cannot assume that coarse value set in mRO50 is the factory one.
Here is the hexdump of a corrupted EEPROM. All data between 0000 and 0080 and filled with zeroes:
home :: art/oscillatord/build ‹70d00e8*› » sudo hexdump -C /sys/class/timecard/ocp0/i2c/5-0050/eeprom 1 ↵
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000080 40 e6 6e 12 f1 7f 00 00 40 e6 6e 12 f1 7f 00 00 |@.n.....@.n.....|
00000090 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 |................|
000000a0 00 00 00 00 00 00 00 00 ff ff ff 7f 00 00 00 00 |................|
000000b0 50 a5 f8 12 f1 7f 00 00 68 ec 6e 12 f1 7f 00 00 |P.......h.n.....|
000000c0 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000d0 a0 8b 5d 5b fe 7f 00 00 00 de 2d 60 a0 e1 cd e2 |..][......-`....|
000000e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000f0 f0 8b 5d 5b fe 7f 00 00 d8 94 5d 5b fe 7f 00 00 |..][......][....|
00000100 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
Another way to see it is to use art_disciplining_manager (util tool from oscillatord) :
home :: art/oscillatord/build ‹70d00e8*› » sudo ./utils/art_disciplining_manager -m /dev/mro50.0 -r
18:12:19 INFO Reading data from /dev/mro50.0
18:12:19 INFO Calibration parameters:
18:12:19 INFO ctrl_nodes_length = 0
18:12:19 INFO ctrl_load_nodes[] =
18:12:19 INFO ctrl_drift_coeffs[] =
18:12:19 INFO Date of calibration: Jan 01 1970
18:12:19 INFO coarse_equilibrium = 0
18:12:19 INFO calibration_valid = 0
18:12:19 INFO ctrl_nodes_length_factory = 0
18:12:19 INFO ctrl_load_nodes_factory[] =
18:12:19 INFO ctrl_drift_coeffs_factory[] =
18:12:19 INFO coarse_equilibrium_factory = 0
18:12:19 INFO estimated_equilibrium_ES = 0
18:12:19 INFO Success
This process explains how to reset EEPROM data and fill it with mRO50 factory coarse value.
To do so, Oscillatord’s utils and test tools must be built:
- in oscillatord project
mkdir build
cd build
cmake -DBUILD_TESTS=true -DBUILD_UTILS=true ..
make
sudo make install
Now there are 2 solutions to reset EEPROM data, depending on wether the server has access to the EEPROM file (depends on the driver version used)
art_eeprom_format is a tool used in production to write manufacturing data and initialize disciplining parameters to factory data.
It can be used to restore disciplining parameters in EEPROM.
| ❗ Make sure that NO jumper are inserted on the card between the 2 pins on the side of the card |
|---|
This jumper is used to enable writing manufacturing data, but this is not what we want to do here
⚠️ First perform a power cycle of server so that mro50 resets its coarse value to factory
| ❗ If the previous step is not done coarse factory value that will be written in EEPROM will be wrong and disciplining may not work at all |
|---|
- Run art_eeprom_format:
sudo ./utils/art_eeprom_format -p /sys/class/timecard/ocp0/i2c/5-0050/eeprom -s F22170004 -d /dev/mro50.0
Program WILL FAIL as it is not able to write manufacturing data, but that is not what we want here.
home :: art/oscillatord/build ‹debug-eeprom*› » sudo ./utils/art_eeprom_format -p /sys/class/timecard/ocp0/i2c/5-0050/eeprom -s F22170004 -d /dev/mro50.0
14:28:09 INFO Writing data to /sys/class/timecard/ocp0/i2c/5-0050/eeprom...
14:28:10 INFO Reading back data just written...
14:28:10 ERROR Error writing data to eeprom
- Check that data has been correctly written by using art_disciplining_manager:
home :: art/oscillatord/build ‹70d00e8*› » sudo ./utils/art_disciplining_manager -m /dev/mro50.0 -r 255 ↵
18:10:06 INFO Reading data from /dev/mro50.0
18:10:06 INFO Calibration parameters:
18:10:06 INFO ctrl_nodes_length = 3
18:10:06 INFO ctrl_load_nodes[] =
18:10:06 INFO 0.250000
18:10:06 INFO 0.500000
18:10:06 INFO 0.750000
18:10:06 INFO ctrl_drift_coeffs[] =
18:10:06 INFO 0.000000
18:10:06 INFO 0.000000
18:10:06 INFO 0.000000
18:10:06 INFO Date of calibration: Jan 01 1970
18:10:06 INFO coarse_equilibrium = -1
18:10:06 INFO calibration_valid = 0
18:10:06 INFO ctrl_nodes_length_factory = 3
18:10:06 INFO ctrl_load_nodes_factory[] =
18:10:06 INFO 0.250000
18:10:06 INFO 0.500000
18:10:06 INFO 0.750000
18:10:06 INFO ctrl_drift_coeffs_factory[] =
18:10:06 INFO 1.200000
18:10:06 INFO 0.000000
18:10:06 INFO -1.200000
18:10:06 INFO coarse_equilibrium_factory = 4186526
18:10:06 INFO estimated_equilibrium_ES = 0
18:10:06 INFO Success
Factory values should exactly look like this, the only value that may change is the coarse_equilibrium_factory fetched from mRO50 of the card
⚠️ First perform a power cycle of server so that mro50 resets its coarse value to factory
| ❗ If the previous step is not done coarse factory value that will be written in EEPROM will be wrong and disciplining may not work at all |
|---|
- Get coarse value from mRO50 using test tool mro50_ctrl:
home :: art/oscillatord/build ‹70d00e8*› » sudo ./tests/mro50_ctrl -d /dev/mro50.0 -c read -t coarse
18:16:15 INFO device = /dev/mro50.0, command = read, type = coarse
18:16:15 INFO coarse value read is 4186526
- Create a config file with the following values, and add the coarse value found using mro50_ctrl (4186526 here):
home :: art/oscillatord/build ‹70d00e8*› » cat default_disciplining_parameters_for_cardX.conf
coarse_equilibrium=4186526
coarse_equilibrium_factory=4186526
ctrl_nodes_length=3
ctrl_load_nodes=0.25,0.5,0.75
ctrl_drift_coeffs=0.0,0.0,0.0
calibration_valid=false
calibration_date=0
estimated_equilibrium_ES=0
- Use art_disciplining_manager to write these value on the EEPROM:
home :: art/oscillatord/build ‹70d00e8*› » sudo ./utils/art_disciplining_manager -m /dev/mro50.0 -w default_disciplining_parameters_for_cardX.conf
18:21:39 INFO Writing default calibration to /dev/mro50.0
18:21:41 INFO Success
- Check value written are good:
home :: art/oscillatord/build ‹a2c46b8*› » sudo ./utils/art_disciplining_manager -m /dev/mro50.0 -r
18:38:27 INFO Reading data from /dev/mro50.0
18:38:27 INFO Calibration parameters:
18:38:27 INFO ctrl_nodes_length = 3
18:38:27 INFO ctrl_load_nodes[] =
18:38:27 INFO 0.250000
18:38:27 INFO 0.500000
18:38:27 INFO 0.750000
18:38:27 INFO ctrl_drift_coeffs[] =
18:38:27 INFO 0.000000
18:38:27 INFO 0.000000
18:38:27 INFO 0.000000
18:38:27 INFO Date of calibration: Jan 01 1970
18:38:27 INFO coarse_equilibrium = 4186526
18:38:27 INFO calibration_valid = 0
18:38:27 INFO ctrl_nodes_length_factory = 3
18:38:27 INFO ctrl_load_nodes_factory[] =
18:38:27 INFO 0.250000
18:38:27 INFO 0.500000
18:38:27 INFO 0.750000
18:38:27 INFO ctrl_drift_coeffs_factory[] =
18:38:27 INFO 1.200000
18:38:27 INFO 0.000000
18:38:27 INFO -1.200000
18:38:27 INFO coarse_equilibrium_factory = 4186526
18:38:27 INFO estimated_equilibrium_ES = 0
18:38:27 INFO Success