Hi,
For our project, we would like to manage a non-intelligent RTM. How do we go about this?
Can we use the pin groups assigned to AMC slot 8 to manage the hotswap controller of the non-intelligent RTM?
Best regards,
Fatih
Hi,
For our project, we would like to manage a non-intelligent RTM. How do we go about this?
Can we use the pin groups assigned to AMC slot 8 to manage the hotswap controller of the non-intelligent RTM?
Best regards,
Fatih
Hello Fatih,
the XML scheme currently only supports intelligent RTMs (like AMCs). However, the PigeonPoint software framework also provides support for non-intelligent RTMs, but we have not yet used this feature. We do however also have a module being designed now where we are planning to use a non-intelligent RTM.
You can indeed use the signals from AMC slot 8 for the hot-swap controller. However, the non-intelligent RTM needs some additional signals, since the IPMC now must take over some of the functions that are handled by the MMC on an intelligent RTM. These are the following:
You can use any of the USR or IPM I/O signals for the additional signals. Let us know if you have any questions.
cheers,
Stefan
Hi Stefan,
Just to clarify things regarding the non-intelligent RTM, we can therefore use the AMC slot 8 signals to manage the Hot-Swap controller. My question is, are we able to use IPMB-L signals from the AMC slot 8 to read/write EEPROM on the non-intelligent RTM, and how do we proceed to define this non-intelligent RTM in the IPMC code?
Thanks,
Fatih
Hello Faith,
yes, you can use the hot-swap signals from AMC port 8 for the non-intelligent RTM, have a look in the hardware guide here on page 6:
Also connect IPMB-L to the RTM through a. hot-swappable I2C buffer as shown there. On the RTM you should connect the EEPROM and any I2C sensor devices you may have to this bus. And you also need the addition signals I mentioned in my previous message (handle switch, blue LED, etc).
As I said previously, the XML scheme does not yet include the settings for non-intelligent RTMs, this still needs to be added. However, enabling support for these in the Pigeon Point software framework only requires some #define statements. If you need a working IPMC firmware urgently, we can work with you to tailor these to your needs until the XML support is ready.
Having said this, I am currently on vacation (until end of July), however I’m sure Markus or Ralf can assist you if needed.
cheers,
Stefan
Hello Markus and Ralf,
The answer regarding the IPMB-L is not clear to us. So let me rephrase my question.
Knowing that we will have a non-intelligent RTM, therefore without MMC, the IPMB-L bus is not used in this case.
Our question is: can we connect IPMB-L directly to the RTM’s EEPROM and does the Pigeon Point software framework support this?
Otherwise, we’ve also thought of putting a second EEPROM on the Blade dedicated to the non-intelligent RTM. This EEPROM would be connected to the Mgt I2C bus, what do you think?
Cheers,
Fatih
Dear Fatih,
I am afraid that I am not knowledgeable enough to answer your question. I propose to wait until Stefan comes back.
Cheers,
Ralf.
Hello Fatih,
Knowing that we will have a non-intelligent RTM, therefore without MMC, the IPMB-L bus is not used in this case.
So you don’t have any I2C sensor devices on the RTM either? A non-intelligent RTM can have these, but they are handled by the IPMC instead of an MMC.
Our question is: can we connect IPMB-L directly to the RTM’s EEPROM and does the Pigeon Point software framework support this?
If there is no need for an I2C bus to the RTM, the this should work.
Otherwise, we’ve also thought of putting a second EEPROM on the Blade dedicated to the non-intelligent RTM. This EEPROM would be connected to the Mgt I2C bus, what do you think?
I believe this should also work, but we would like to confirm this with PigeonPoint support first. As I said before, you are the first user of a non-intelligent RTM.
cheers,
Stefan
Hello Fatih,
we confirmed with PigeonPoint: the EEPROM with the RTM FRU information can also reside on the front blade. It can be attached to any of the local I2C busses of the IPMC. If you already have an EEPROM on the board with enough space, this can even be shared with the RTM FRU information by using an address offset.
BTW, I am available to look at the IPMC part of the hardware design once it is done.
Best regards,
Stefan
Hello Stefan,
Thanks for the clarification. We have decided to add a second EEPROM to our board.
Cheers,
Fatih
Dear Support Team,
I wish you a happy new year 2025.
I’m coming back to you because we are about to start production of our non-intelligent RTM boards.
Have you had time to include the settings for non-intelligent RTMs in the XML schema?
If not, could you describe us how to set the necessary #define statements?
Cheers,
Fatih
Dear Support Team,
I’m coming back to you again, have you made any progress on this topic?
Cheers,
Fatih
Hello Fatih,
I am working on this, however I need to know which IPMC pins are connected to the RTM to finalize it. Are the schematics of the main blade and the RTM available?
cheers,
Stefan
Dear Stefan,
As the CERN-IPMC DevKit cannot access I/O above pin number 35 (didn’t known this limit before), can you please give us the configuration needed to simulate our passive-RTM code on AMC slot 0, 2 or 4 that should suit this limit ?
Best regards,
Sylvain
Hello Sylvain,
sorry for the late reply. The general purpose IPMC I/O are split into USR (35 pins) and IPM (16 pins). Both can be controlled and read using the IPMC DevKit. This can be done using the GETIO and SETIO functions of the DevKit python library here:
https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-devkit
Alternatively you can use the devkit_ctrl utility. The numbering of the I/O pins is as follows:
0-34 : USR_IO pins
35-50: IPM_IO pins
There is a multiplexer in the CPLD which is used to control the AMC I/O pins, so all AMC slots should be equivalent in this respect. Therefore I’m not sure why using a dfferent AMC slot in the non-intelligent RTP confiuration would help.
Let me know if you have any further questions.
cheers,
Stefan
Hello Stefan,
Thank you for your answer.
I use devkit_ctrl, and precisely cannot read IO pin above 35:
$ for i in `seq 1 56`; do echo -n "$i: "; devkit_ctrl -a get_user_io -i $i;done
1: Result(s):
==========
status: success
state: vcc
2: Result(s):
==========
status: success
state: vcc
3: Result(s):
==========
status: success
state: vcc
4: Result(s):
==========
status: success
state: vcc
5: Result(s):
==========
status: success
state: vcc
6: Result(s):
==========
status: success
state: vcc
7: Result(s):
==========
status: success
state: vcc
8: Result(s):
==========
status: success
state: vcc
9: Result(s):
==========
status: success
state: vcc
10: Result(s):
==========
status: success
state: vcc
11: Result(s):
==========
status: success
state: vcc
12: Result(s):
==========
status: success
state: vcc
13: Result(s):
==========
status: success
state: vcc
14: Result(s):
==========
status: success
state: vcc
15: Result(s):
==========
status: success
state: vcc
16: Result(s):
==========
status: success
state: vcc
17: Result(s):
==========
status: success
state: vcc
18: Result(s):
==========
status: success
state: vcc
19: Result(s):
==========
status: success
state: vcc
20: Result(s):
==========
status: success
state: vcc
21: Result(s):
==========
status: success
state: vcc
22: Result(s):
==========
status: success
state: vcc
23: Result(s):
==========
status: success
state: vcc
24: Result(s):
==========
status: success
state: vcc
25: Result(s):
==========
status: success
state: vcc
26: Result(s):
==========
status: success
state: vcc
27: Result(s):
==========
status: success
state: vcc
28: Result(s):
==========
status: success
state: vcc
29: Result(s):
==========
status: success
state: vcc
30: Result(s):
==========
status: success
state: vcc
31: Result(s):
==========
status: success
state: vcc
32: Result(s):
==========
status: success
state: vcc
33: Result(s):
==========
status: success
state: vcc
34: Result(s):
==========
status: success
state: gnd
35: Result(s):
==========
status: success
state: vcc
36: Result(s):
==========
status: failed
error: IO id shall be lower than 35
37: Result(s):
==========
status: failed
error: IO id shall be lower than 35
38: Result(s):
==========
status: failed
error: IO id shall be lower than 35
39: Result(s):
==========
status: failed
error: IO id shall be lower than 35
40: Result(s):
==========
status: failed
error: IO id shall be lower than 35
41: Result(s):
==========
status: failed
error: IO id shall be lower than 35
42: Result(s):
==========
status: failed
error: IO id shall be lower than 35
43: Result(s):
==========
status: failed
error: IO id shall be lower than 35
44: Result(s):
==========
status: failed
error: IO id shall be lower than 35
45: Result(s):
==========
status: failed
error: IO id shall be lower than 35
46: Result(s):
==========
status: failed
error: IO id shall be lower than 35
47: Result(s):
==========
status: failed
error: IO id shall be lower than 35
48: Result(s):
==========
status: failed
error: IO id shall be lower than 35
49: Result(s):
==========
status: failed
error: IO id shall be lower than 35
50: Result(s):
==========
status: failed
error: IO id shall be lower than 35
51: Result(s):
==========
status: failed
error: IO id shall be lower than 35
52: Result(s):
==========
status: failed
error: IO id shall be lower than 35
53: Result(s):
==========
status: failed
error: IO id shall be lower than 35
54: Result(s):
==========
status: failed
error: IO id shall be lower than 35
55: Result(s):
==========
status: failed
error: IO id shall be lower than 35
56: Result(s):
==========
status: failed
error: IO id shall be lower than 35
Best regards,
Sylvain
Hello Sylvain,
I assume you have an old version of the the IPMC devkit software. You will need to get the updated version here:
https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-tester
devkit_ctrl is in fact simply calling the following python script:
https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-tester/-/blob/master/ipmc-tester/DevKITControl.py
See below:
‘’’
ipmc@ipmc-tester14:~ $ cat /usr/bin/devkit_ctrl
export PYTHONPATH=/home/ipmc/work/ipmc-tester/ipmc-devkit
python3 /home/ipmc/work/ipmc-tester/ipmc-tester/DevKITControl.py “$@”
‘’’
You will need to adjust the path to point to whereever you checked out the latest version of the ipmc-tester repository.
Let me know if you have any problems.
cheers,
Stefan
Thank you Stefan,
I carefully followed your instructions, but the script know bugs:
$ pwd
/home/pi/SylvainL
$ git clone https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-tester.git
$ cat /usr/bin/devkit_ctrl
### Original: ###
#python3 /ipmc/ipmc-tester/ipmc-tester/DevKITControl.py "$@"
### As of 2025.04.09 following https://cern-ipmc-forum.web.cern.ch/t/management-of-non-intelligent-rtm/319/15
export PYTHONPATH=/home/pi/SylvainL/ipmc-tester/ipmc-devkit
python3 /home/pi/SylvainL/ipmc-tester/ipmc-tester/DevKITControl.py "$@"
$ devkit_ctrl
Usage: devkit_ctrl -a <ACTION> [--json]
Where action can be:
====================
Development kit functions:
get_power: get power status
select_i2cout: select I2C OUT portv
ATCA functions:
set_atca_ha: set ATCA hardware address
get_atca_ha: get ATCA hardware address
set_atca_hs: set ATCA Handle Switch position
get_atca_blueled: get ATCA blue led status
get_atca_led1: get ATCA FRU_LED1 status
get_atca_led2: get ATCA FRU_LED2 status
get_atca_led3: get ATCA FRU_LED3 status
get_atca_12ven: get ATCA 12V Enable signal
set_atca_pgooda: set power good A signal
set_atca_pgoodb: set power good B signal
I/O functions:
set_user_io: set user I/O signal
get_user_io: get user I/O signal
AMC functions:
set_amc_ga: set AMC geographical address
sel_amc_port: select AMC port on IPMC connector
set_amc_state: set AMC state - inserted or extracted
set_amc_hs: set AMC Handle Switch position
get_amc_mpen: get AMC MP Enable signal
get_amc_ppen: get AMC PP Enable signal
set_amc_mpgood: set AMC MP good signal
set_amc_ppgood: set AMC PP good signal
$ devkit_ctrl -a get_power
Traceback (most recent call last):
File "/home/pi/SylvainL/ipmc-tester/ipmc-tester/DevKITControl.py", line 581, in <module>
IPMCDevObject = IPMCDevCom.IPMCDevCom(umgt_port = umgt_port)
TypeError: __init__() got an unexpected keyword argument 'umgt_port'
$ # in case of right-access related problem, checking as root
$ sudo su -
# devkit_ctrl -a get_power
Traceback (most recent call last):
File "/home/pi/SylvainL/ipmc-tester/ipmc-tester/DevKITControl.py", line 8, in <module>
from IPMCDevLib import IPMCDevCom as IPMCDevCom
ModuleNotFoundError: No module named 'IPMCDevLib'
By the way, how should I retrieve the current version I’ve got installed on my DevKit ?
Best regards,
Sylvain
Hello Sylvain,
ipmc-devkit is a git submodule, so unless you updated it manually afterwards, you need to do:
git clone --recurse-submodules [https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-tester.git](https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-tester.git)
Hi,
Looks like I don’t have sufficient permission on those repos ?
$ git submodule update
Cloning into '/home/pi/SylvainL/ipmc-tester/ipmc-firmware/tester-firmware'...
Username for 'https://gitlab.cern.ch': slafrass
Password for 'https://slafrass@gitlab.cern.ch':
remote: The project you were looking for could not be found or you don't have permission to view it.
fatal: repository 'https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-tester-firmware.git/' not found
fatal: clone of 'https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-tester-firmware' into submodule path '/home/pi/SylvainL/ipmc-tester/ipmc-firmware/tester-firmware' failed
Failed to clone 'ipmc-firmware/tester-firmware'. Retry scheduled
Cloning into '/home/pi/SylvainL/ipmc-tester/ipmc-firmware/user-firmware'...
Username for 'https://gitlab.cern.ch': slafrass
Password for 'https://slafrass@gitlab.cern.ch':
remote: The project you were looking for could not be found or you don't have permission to view it.
fatal: repository 'https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-user-firmware.git/' not found
fatal: clone of 'https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-user-firmware' into submodule path '/home/pi/SylvainL/ipmc-tester/ipmc-firmware/user-firmware' failed
Failed to clone 'ipmc-firmware/user-firmware'. Retry scheduled
Cloning into '/home/pi/SylvainL/ipmc-tester/ipmc-firmware/tester-firmware'...
Username for 'https://gitlab.cern.ch': slafrass
Password for 'https://slafrass@gitlab.cern.ch':
remote: The project you were looking for could not be found or you don't have permission to view it.
fatal: repository 'https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-tester-firmware.git/' not found
fatal: clone of 'https://gitlab.cern.ch/ep-ese-be-xtca/ipmc-tester-firmware' into submodule path '/home/pi/SylvainL/ipmc-tester/ipmc-firmware/tester-firmware' failed
Failed to clone 'ipmc-firmware/tester-firmware' a second time, aborting
Hello Sylvain,
sorry about that. I changed the permission on these sub-modules, even though they are not strictly needed for what you want. Can you please try again?
cheers,
Stefan