Skip to content
Snippets Groups Projects
Commit b37ab722 authored by Paulus Kruger's avatar Paulus Kruger
Browse files

RECVT.yaml added

parent c6176f9e
No related branches found
No related tags found
No related merge requests found
import yamlconfig as yc
RW={'ro':'_R','rw':'_R/_RW','variable':'_RW'}
Y=yc.yamlconfig('RECVTR')
sep='\t'
#Sort alphabetically
names=[(v['name']).upper() for v in Y.getvars()]
SI=sorted(range(len(names)), key=lambda k: names[k])
print("Name"+sep+"Dimension"+sep+"Type"+sep+"R/W"+sep+"Mask"+sep+"Monitored"+sep+"Description")
for i0 in SI:
v=Y.getvar1(i0)
#for v in Y.getvars():
if v.get("debug",False): continue;
S=v['name']+sep
S+=str(v['dim'])+sep
S+=str(v['dtype'])+sep
S+=RW[v['rw']]+sep
S+=v.get('mask','')+sep
S+=str(v.get('monitor',''))+sep
S+=str(v.get('description',''))+sep
print(S)
print()
print("Name"+sep+"Mask"+sep+"Description")
for v in Y.conf['methods']:
if v.get("debug",False): continue;
S=v['name']+sep
# S+=str(v['dim'])+sep
# S+=str(v['dtype'])+sep
# S+=RW[v['rw']]+sep
S+=v.get('mask','')+sep
# S+=str(v.get('monitor',''))+sep
S+=str(v.get('description',''))+sep
print(S)
version: "1.0"
description: "1234"
drivers:
- name: I2C1 #TCA9548
type: i2c_switch
devreg: [0x70]
parameters: [1] #I2C port number
- name: I2C_RCU
type: i2c_array #An array of similar devices connected to an I2C switch
parent: I2C1
parameters: [0,31,14] #start,number of RCUs, error count to disable I2C
status: RCU_I2C_STATUS
- name: I2C_HBAT
type: hba1 #Special driver to manage HBAT1s.
parent: I2C_RCU
devreg: [0x40.0x10] #I2C broadcast register
parameters: [15] #PPS GPIO pin
- name: I2Cbb1
type: i2cbitbang1 #I2C bitbang via GPIO expander
devreg: [IO3.GPIO2,IO3.GPIO2,IO3.CONF2]
parameters: [5,6,6] #pins
parent: I2C_RCU
- name: I2Cbb2
type: i2cbitbang1
devreg: [IO3.GPIO2,IO3.GPIO2,IO3.CONF2]
parameters: [4,6,6]
parent: I2C_RCU
- name: I2Cbb3
type: i2cbitbang1
devreg: [IO3.GPIO2,IO3.GPIO2,IO3.CONF2]
parameters: [3,6,6]
parent: I2C_RCU
- name: SPIbb1
type: spibitbang1 #SPI bitbang via GPIO expander: CLK, SDIO, SDIOdir,CS
devreg: [IO3.GPIO1,IO3.GPIO1,IO3.CONF1,IO3.GPIO2]
parameters: [1,0,0,0]
parent: I2C_RCU
- name: SPIbb2
type: spibitbang1
devreg: [IO3.GPIO1,IO3.GPIO1,IO3.CONF1,IO3.GPIO2]
parameters: [3,2,2,1]
parent: I2C_RCU
- name: SPIbb3
type: spibitbang1
devreg: [IO3.GPIO1,IO3.GPIO1,IO3.CONF1,IO3.GPIO2]
parameters: [5,4,4,2]
parent: I2C_RCU
# - name: HBA_trigger
# type: gpio_hba_trigger
# parameters: [15] #PPS GPIO pin
# devreg: [0x40.0x10] #I2C broadcast register
# parent: I2C_RCU
#This is the I2C devices in the RCU
device_registers:
- name: IO
dim: 3
description: [IO-Expander for filter selection,IO-Expander for ON/OFF, Band, BUFx2,IO-Expander for ADC control]
address: [0x75,0x76,0x20]
device: [TCA9539,TCA9539,TCA6416]
driver: I2C1
registers:
- name: CONF1
description: Direction of port1
address: 6
store: True
- name: CONF2
description: Direction of port2
address: 7
store: True
- name: GPIO1
description: Input/Ouput port 1
address: [0,2] #Read / Write address different
store: True
- name: GPIO2
description: Input/Ouput port 2
address: [1,3]
store: True
- name: ROM
description: IO-Expander for filter selection
address: 0x50
driver: I2C1
registers:
- name: ID
description: Random
address: 0xfc
- name: Version
description: Set in production
address: 0
- name: AN
description: Monitor ADC on RCU
address: 0x74 #was 0x14 on RCU2-DIG PCBs
device: LTC2495
driver: I2C1
registers:
- name: V_1v8
address: 0xB080
- name: V_2v5
address: 0xB880
- name: V_3v3
address: 0xB180
- name: I_Ant0
address: 0xB980
- name: I_Ant1
address: 0xB280
- name: I_Ant2
address: 0xBA80
- name: V_Ant_I0
address: 0xB380
- name: V_Ant_O0
address: 0xBB80
- name: V_Ant_I1
address: 0xB480
- name: V_Ant_O1
address: 0xBC80
- name: V_Ant_I2
address: 0xB580
- name: V_Ant_O2
address: 0xBD80
- name: Temp
address: 0xA0C0
#This 'special' devices that uses I2C
- name: HB_UC
description: RCU microcontroller
address: 0x40
driver: I2C1
registers:
- name: ID
description: Device ID
address: 0
- name: HB_UC_update
description: RCU microcontroller
address: 0x40
driver: HBA_trigger
registers:
- name: wait_pps
address: 10
- name: HBAT
dim: 3
address: [0x41,0x42,0x43]
description: Virtual HBAT0 interface
driver: I2C_HBAT
registers:
- name: XY
address: 0x10
description: XY delay register
store: True
- name: Version
address: 127
description: HBAT server version
- name: ADC
dim: 3
description: ADC SPI control
device: AD9683
driver: [SPIbb1,SPIbb2,SPIbb3]
registers:
- name: PLL_stat
description: PLL locked status
address: 0x0A
- name: JESD_control1
description: JESD link control
address: 0x5F
- name: SYNC_control
address: 0x3A
- name: CML_level
description: CML output adjust
address: 0x15
- name: Update
description: Global device uptate
address: 0xFF
- name: DTH
dim: 3
description: CW dither source
device: SI4012
driver: [I2Cbb1,I2Cbb1,I2Cbb1]
address: 0x70
registers:
- name: Freq
description: Frequency
address: [0x1240,0x1140]
- name: Property
description: Properties
address: [0x12,0x11]
- name: State
address: [0x61,0x60]
- name: Start
description: Start CW
address: [0x62,0x62]
- name: Stop
description: Stop CW
address: [0x67,0x67]
- name: Rev
address: 0x10
- name: Tune
address: [0x1221,0x1121]
- name: CONF
address: [0x1210,0x1110]
variables:
- name: RCU_ANT_mask
description: Only masked RF chains are updated
driver: I2C_RCU
rw: variable #server RW variable, not linked to IO
dtype: boolean
dim: 96
- name: RCU_mask
description: Only masked RCUs are updated
driver: I2C_RCU
rw: variable #server RW variable, not linked to IO
dtype: boolean
dim: 32
- name: RCU_I2C_STATUS
description: 0=Good, >0 communication error
driver: I2C_RCU
rw: ro #server RW variable, not linked to IO
dtype: uint8
mask: RCU_mask
dim: 32
# - name: RCU_state
# description: State of RCUs 0=unknown, 1=ready, 2=busy, 3= wait PPS, 4=error
# driver: I2C_RCU
# rw: ro #server variable, not linked to IO
# dtype: uint8
# dim: 1
- name: RECVTR_busy
description: True when I2C line is busy
rw: ro #server variable, not linked to IO
dtype: boolean
dim: 1
- name: RCU_attenuator
description: RCU Attenuation (dB)
driver: I2C_RCU
devreg: [IO1.GPIO1,IO1.GPIO2,IO2.GPIO1]
bitoffset: [0,0,0]
width: 6
rw: rw
dtype: uint8
dim: 96
mask: RCU_ANT_mask
- name: RCU_band
description: Band select 1=10MHz,2=30MHz
driver: I2C_RCU
devreg: [IO2.GPIO2,IO2.GPIO2,IO2.GPIO2]
bitoffset: [0,2,4]
width: 2
rw: rw
dtype: uint8
dim: 96
mask: RCU_ANT_mask
- name: [RCU_IO1_GPIO1,RCU_IO1_GPIO2,RCU_IO2_GPIO1,RCU_IO2_GPIO2,RCU_IO3_GPIO1,RCU_IO3_GPIO2]
driver: I2C_RCU
devreg: [IO1.GPIO1,IO1.GPIO2,IO2.GPIO1,IO2.GPIO2,IO3.GPIO1,IO3.GPIO2]
width: 8
rw: ro
dtype: uint8
dim: 32
mask: RCU_mask
debug: True
- name: RCU_LED0
driver: I2C_RCU
description: LED 1
devreg: IO2.GPIO2
bitoffset: 6
width: 1
rw: rw
dtype: boolean
dim: 32
mask: RCU_mask
- name: RCU_LED1
driver: I2C_RCU
description: LED 2
devreg: IO2.GPIO2
bitoffset: 7
width: 1
rw: rw
dtype: boolean
dim: 32
mask: RCU_mask
- name: RCU_temperature
description: RCU Temperature (Kelvin)
driver: I2C_RCU
devreg: AN.Temp
width: 23
scale: 4.21e-3
rw: ro
dtype: double
dim: 32
monitor: true
mask: RCU_I2C_STATUS
- name: RCU_3V3
description: RCU 3.3V voltage (V)
driver: I2C_RCU
devreg: AN.V_3v3
width: 23
scale: 1.463e-6
rw: ro
dtype: double
dim: 32
monitor: true
mask: RCU_I2C_STATUS
- name: RCU_1V8
description: RCU 1.8V voltage (V)
driver: I2C_RCU
devreg: AN.V_1v8
width: 23
scale: 7.1526e-7
rw: ro
dtype: double
dim: 32
monitor: true
mask: RCU_I2C_STATUS
- name: RCU_2V5
description: RCU 2.5V voltage (V)
driver: I2C_RCU
devreg: AN.V_2v5
width: 23
scale: 7.1526e-7
rw: ro
dtype: double
dim: 32
monitor: true
mask: RCU_I2C_STATUS
- name: RCU_V_ANT
description: RCU antenna voltage (V)
driver: I2C_RCU
devreg: [AN.V_Ant_O0,AN.V_Ant_O1,AN.V_Ant_O2]
width: 23
scale: 2.7895e-6
rw: ro
dtype: double
dim: 96
monitor: true
mask: RCU_I2C_STATUS
- name: RCU_ANT_V
description: Voltage on antenna output of RCU (V). Controlled by ANT_PWR_ON.
driver: I2C_RCU
devreg: [AN.V_Ant_I0,AN.V_Ant_I1,AN.V_Ant_I2]
width: 23
scale: 2.7895e-6
rw: ro
dtype: double
dim: 96
monitor: true
mask: RCU_I2C_STATUS
- name: RCU_ANT_I
description: Current drawn on antenna output of RCU (A)
driver: I2C_RCU
devreg: [AN.I_Ant0,AN.I_Ant1,AN.I_Ant2]
width: 23
scale: 7.1526e-8
rw: ro
dtype: double
dim: 96
monitor: true
mask: RCU_I2C_STATUS
- name: RCU_PWR_DIGITAL_ON
description: RCU digital power enable. Controlled by calling RCU_on/RCU_off
driver: I2C_RCU
devreg: IO2.GPIO1
width: 1
bitoffset: 6
rw: ro
dtype: boolean
dim: 32
mask: RCU_mask
- name: RCU_PWR_GOOD
description: Status of RCU power given by LDOs.
driver: I2C_RCU
devreg: IO2.GPIO1
width: 1
bitoffset: 7
rw: ro
dtype: boolean
dim: 32
monitor: true
mask: RCU_I2C_STATUS
- name: RCU_PWR_ANALOG_ON
description: RCU analog power enable. Controlled by RCU_on/off
driver: I2C_RCU
devreg: IO1.GPIO2
width: 1
bitoffset: 7
rw: ro
dtype: boolean
dim: 32
mask: RCU_mask
- name: RCU_DTH_SHUTDOWN
description: False means dither source powered on. Controlled by TBD
driver: I2C_RCU
devreg: [IO3.GPIO1,IO3.GPIO1,IO3.GPIO2]
width: 1
bitoffset: [7,6,7]
rw: ro
dtype: boolean
dim: 96
mask: RCU_ANT_mask
- name: RCU_ANT_PWR_ON
description: Antenna power output ON/OFF control. Monitored by Ant_V.
driver: I2C_RCU
devreg: [IO1.GPIO1,IO1.GPIO1,IO1.GPIO2]
width: 1
bitoffset: [6,7,6]
rw: rw
dtype: boolean
dim: 96
mask: RCU_ANT_mask
- name: HBAT_beamformer_delays
description: HBAT1 frontend delays (0.5ns steps)
driver: I2C_HBAT
devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY]
bitoffset: [2,2,2]
width: 5
rw: rw
dtype: uint8
dim: 3072
mask: RCU_ANT_mask
wait: 100 #ms
- name: [HBAT_LED_on,HBAT_PWR_on,HBAT_PWR_LNA_on]
description: HBA frontend control
driver: I2C_HBAT
devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY]
bitoffset: [0,7,1]
width: 1
rw: rw
dtype: boolean
dim: 3072
mask: RCU_ANT_mask
wait: 100 #ms
- name: RCU_ID
description: Unique PCB ID
driver: I2C_RCU
devreg: ROM.ID
width: 32
rw: ro
dtype: uint32
dim: 32
mask: RCU_mask
- name: RCU_version
description: RCU version number
driver: I2C_RCU
devreg: ROM.Version
width: 80 #10 characters
rw: ro
dtype: string
dim: 32
mask: RCU_mask
- name: RCU_ADC_lock
description: RCU ADC lock status, 0x81=locked
driver: I2C_RCU
devreg: [ADC1.PLL_stat,ADC2.PLL_stat,ADC3.PLL_stat]
width: 8
rw: ro
dtype: uint8
dim: 96
monitor: true
- name: RCU_ADC_sync
driver: I2C_RCU
devreg: [ADC1.SYNC_control,ADC2.SYNC_control,ADC3.SYNC_control]
width: 8
rw: ro
dtype: uint8
dim: 96
debug: true
- name: RCU_ADC_JESD
driver: I2C_RCU
devreg: [ADC1.JESD_control1,ADC2.JESD_control1,ADC3.JESD_control1]
width: 8
rw: ro
dtype: uint8
dim: 96
debug: true
- name: RCU_ADC_CML_level
driver: I2C_RCU
devreg: [ADC1.CML_level,ADC2.CML_level,ADC3.CML_level]
width: 8
rw: ro
dtype: uint8
dim: 96
debug: true
- name: RCU_DTH_freq
description: RCU Dither source frequency (Hz)
driver: I2C_RCU
devreg: [DTH1.Freq,DTH2.Freq,DTH3.Freq]
width: 32
rw: rw
dtype: uint32
dim: 96
mask: RCU_ANT_mask
- name: RCU_DTH_tune
driver: I2C_RCU
devreg: [DTH1.Tune,DTH2.Tune,DTH3.Tune]
width: 16
rw: rw
dtype: uint32
dim: 96
mask: RCU_ANT_mask
debug: true
- name: RCU_DTH_config
driver: I2C_RCU
devreg: [DTH1.CONF,DTH2.CONF,DTH3.CONF]
width: 8
rw: rw
dtype: uint32
dim: 96
mask: RCU_ANT_mask
debug: true
- name: RCU_DTH_ON
description: RCU Dither on. Controlled by RCU_DTH_on/off
driver: I2C_RCU
devreg: [DTH1.State,DTH2.State,DTH3.State]
width: 1 #read only first of 2 bytes
bitoffset: [1,1,1]
rw: ro
dtype: boolean
dim: 96
mask: RCU_ANT_mask
- name: RCU_DTH_Rev
driver: I2C_RCU
devreg: [DTH1.Rev,DTH2.Rev,DTH3.Rev]
width: 88
rw: rw
dtype: uint32
dim: 96
mask: RCU_ANT_mask
debug: true
methods:
- name: RCU_Init #Called after startup to load. Should have all stored registers
driver: I2C_RCU
debug: True
instructions:
- RCU_IO1_GPIO1: Update
- RCU_IO1_GPIO2: Update
- RCU_IO2_GPIO1: Update
- RCU_IO2_GPIO2: Update
- RCU_IO3_GPIO1: Update
- RCU_IO3_GPIO2: Update
# - IO1.GPIO2: Update
# - IO2.GPIO1: Update
# - IO2.GPIO2: Update
# - IO3.GPIO1: Update
# - IO3.GPIO2: Update
- IO3.CONF1: Update
- RCU_update: 0
- name: RCU_on
description: Initialize RCU and it in the ON state
driver: I2C_RCU
mask: RCU_mask
instructions:
- RCU_I2C_STATUS: 0
- IO2.CONF1: 0x80 #Pgood on 0x80
- IO2.GPIO1: 0x4A #0x40 Dig on, 0x0a =10dB att
- IO2.GPIO2: 0x55 #0x15 #Band0 (or 0x2a band 1) #LEDS=on=low
- IO3.GPIO1: 0x15 #ADC_SDIO=high, clk=low, DTH_EN=low
- IO3.GPIO2: 0x47 #ADC SC=high, DTH_SDA=high
- IO1.GPIO1: 0x0A #0x0a = 10dB att
- IO1.GPIO2: 0x8A #0x80 Analog on, 0x0a=10dB att
- IO2.CONF2: 0
- IO3.CONF1: 0
- IO3.CONF2: 0
- IO1.CONF1: 0
- IO1.CONF2: 0
# - RCU_GPIO1: Update
# - RCU_GPIO2: Update
# - RCU_attenuator: [10,10,10] #Set OPC-UA variable
- WAIT: 500 #ms to wait
- ADC1_on: 0 #call another opc-ua method
- ADC2_on: 0
- ADC3_on: 0
- WAIT: 500 #ms to wait
- RCU_update: 0
- name: RCU_update
driver: I2C_RCU
mask: RCU_mask
debug: True
instructions:
- RCU_PWR_DIGITAL_ON: Update #Read value and update the OPC-UA variable
- RCU_PWR_ANALOG_ON: Update
- ANT_PWR_ON: Update
- RCU_ID: Update
- RCU_version: Update
- RCU_LED0: Update
- RCU_LED1: Update
- RCU_attenuator: Update
- RCU_band: Update
- RCU_ADC_lock: Update
- RCU_ADC_sync: Update
- RCU_DTH_SHUTDOWN: Update
- RCU_DTH_freq: Update
- RCU_DTH_ON: Update
- name: ADC1_on
driver: I2C_RCU
debug: True
# rw: hidden
instructions:
- ADC1.JESD_control1 : 0x14
- ADC1.SYNC_control: 1 #Setup ADCs
- ADC1.CML_level: 0x7
- ADC1.Update: 1 #Needed to update ADC registers
- name: ADC2_on
driver: I2C_RCU
debug: True
# rw: hidden
instructions:
- ADC2.JESD_control1 : 0x14
- ADC2.SYNC_control: 1 #Setup ADCs
- ADC2.CML_level: 0x7
- ADC2.Update: 1 #Needed to update ADC registers
- name: ADC3_on
driver: I2C_RCU
debug: True
# rw: hidden
instructions:
- ADC3.JESD_control1 : 0x14
- ADC3.SYNC_control: 1 #Setup ADCs
- ADC3.CML_level: 0x7
- ADC3.Update: 1 #Needed to update ADC registers
- name: RCU_off
description: Put RCU in low-power state
driver: I2C_RCU
mask: RCU_mask
instructions:
- RCU_I2C_STATUS: 0
- RCU_PWR_ANALOG_ON: 0 #Switch power off
- RCU_PWR_DIGITAL_ON: 0 #Switch power off
- IO2.GPIO1: 0
- IO2.GPIO2: 0
- IO3.GPIO1: 0
- IO3.GPIO2: 0
- IO1.GPIO1: 0
- IO1.GPIO2: 0
- RCU_update: 0
#todo, also make all GPIO pins (except power enables) inputs to remove all power from devices.
- name: RCU_HBAT_WAIT_PPS
driver: I2C_RCU
mask: RCU_mask
debug: True
instructions:
- RCU_state: 3
- HB_UC_update.wait_pps : 1
- RCU_state: 1
- name: RCU_DTH_on
description: Switch dither source on
driver: I2C_RCU
mask: RCU_mask
# rw: hidden
instructions:
# - RCU_DTH_SHUTDOWN : 0
- RCU_DTH_config : [0,0,0]
# - RCU_DTH_tune : [0,0,0,0,0,0]
# - DTH1.CONF : 0
# - DTH1.Tune : [0,0] #no tuning
# - WAIT: 10
# - DTH1.Start : [1,0,0,0,1,0x55]
- DTH1.Start : [0,1,0,0,1]
# - DTH1.0x60: #PA_config...
# - DTH2.CONF : 0
# - WAIT: 10
# - DTH2.Tune : [0,0] #no tuning
# - WAIT: 10
- DTH2.Start : [0,1,0,0,1]
# - DTH3.CONF : 0
# - WAIT: 10
# - DTH3.Tune : [0,0] #no tuning
# - WAIT: 10
- DTH3.Start : [0,1,0,0,1]
- RCU_DTH_ON : Update
- RCU_DTH_config: Update #debug
- RCU_DTH_tune: Update #debug
- name: RCU_DTH_off
description: Switch dither source off
driver: I2C_RCU
mask: RCU_mask
# rw: hidden
instructions:
# - RCU_DTH_SHUTDOWN : [1,1,1]
# - WAIT: 100
# - RCU_DTH_SHUTDOWN : [0,0,0]
# - RCU_DTH_SHUTDOWN : 1
- DTH1.Stop : [0,0]
- DTH2.Stop : [0,0]
- DTH3.Stop : [0,0]
# - DTH1.State : [0,0]
# - DTH2.State : [0,0]
# - DTH3.State : [0,0]
- RCU_DTH_ON: Update
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment