apollo-lhc / cm_mcu Goto Github PK
View Code? Open in Web Editor NEWMicrocontroller source code for the APOLLO blade for the CMS tracker HL-LHC upgrade.
License: MIT License
Microcontroller source code for the APOLLO blade for the CMS tracker HL-LHC upgrade.
License: MIT License
Suggestion by Charlie.
I think it is valuable to have the CM board serial number stored in memory and be available to the SM. I put a simple EEPROM on the I2C bus that connects to the SM for this purpose.
As I was thinking about how to program and access this memory, it occurred to me that using the MCU's own internal EEPROM (manual section 8.2.4) eliminates the need for this external chip.
So we need an MCU command that writes a command line value into the serial number address of the internal EEPROM. Part of the MCU startup code would be to retrieve this serial number and make it available to the SM over the I2C bus.
One could make this much more elaborate, and have information about which FPGAs and FireFlys ought to be available.
issue : the semaphore give/take for a right device has not been implemented properly in some modules that rely on apollo_i2c_ctl functions. For instance, the i2c_scan 2 and i2c_scan 4 have gone wild because it has tried to access a semaphore that is already taken by other modules.
% i2c_scan 2
2064034 MONI2C ERR MonitorI2CTask.c:176:PN_BASE read Error ADDR_ACK_ERROR, break (ps=0)
2064079 I2C ERR I2CCommunication.c:198:write fail PERIPHERAL_BUSY
2064079 MONI2C WRN MonitorI2CTask.c:153:Mux write error PERIPHERAL_BUSY, break (instance=CLKR0A,ps=0)
2064080 SRV INF MonitorI2CTask.c:191:stack (CLKR0) = 272(was 280)
2064082 MONI2C WRN MonitorI2CTask.c:153:Mux write error ADDR_ACK_ERROR, break (instance=CLKSI,ps=0)
2064105 MONI2C WRN MonitorI2CTask.c:153:Mux write error ADDR_ACK_ERROR, break (instance=CLKR0A,ps=0)
2064107 MONI2C WRN MonitorI2CTask.c:153:Mux write error ADDR_ACK_ERROR, break (instance=CLKSI,ps=0)
2064130 MONI2C WRN MonitorI2CTask.c:153:Mux write error ADDR_ACK_ERROR, break (instance=CLKR0A,ps=0)
2064145 MONI2C ERR MonitorI2CTask.c:166:SMBUS page failed ADDR_ACK_ERROR
SMBUS command failed (setting page)
2064192 MONI2C WRN MonitorI2CTask.c:153:Mux write error ADDR_ACK_ERROR, break (instance=CLKR0A,ps=0)
2064194 MONI2C WRN MonitorI2CTask.c:153:Mux write error ADDR_ACK_ERROR, break (instance=CLKSI,ps=0)
2064217 MONI2C WRN MonitorI2CTask.c:153:Mux write error ADDR_ACK_ERROR, break (instance=CLKR0A,ps=0)
2064219 MONI2C WRN MonitorI2CTask.c:153:Mux write error ADDR_ACK_ERROR, break (instance=CLKSI,ps=0)
2064243 MONI2C ERR MonitorI2CTask.c:166:SMBUS page failed ADDR_ACK_ERROR
SMBUS command failed (setting page)
2064254 MONI2C ERR MonitorI2CTask.c:176:REG_0x0D read Error ADDR_ACK_ERROR, break (ps=0)
2064256 MONI2C WRN MonitorI2CTask.c:153:Mux write error ADDR_ACK_ERROR, break (instance=CLKSI,ps=0)
i2c bus scan, device 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 3 -- 5 -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- 1b -- 1d -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- 34 -- 36 37 38 39 -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- 52 -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- 69 6a -- 6c -- -- --
70: 70 -- -- -- -- -- -- 77
%
solution: will have to search for all remaining modules that call i2c related functions in order to form a right semaphore pair corresponding to a device that tries to access it.
Also, we could have cleaned up the following left-over non-generalized semaphores as well.
[pk568@lnx231 cm_mcu]$ grep -r args.xSem projects/cm_mcu/ projects/cm_mcu/commands/SensorControl.c: SemaphoreHandle_t s = ffldaq_f1_args.xSem;
projects/cm_mcu/commands/SensorControl.c: s = ffldaq_f2_args.xSem;
projects/cm_mcu/commands/SensorControl.c: SemaphoreHandle_t s = ffldaq_f1_args.xSem;
projects/cm_mcu/commands/SensorControl.c: s = ffldaq_f2_args.xSem;
projects/cm_mcu/commands/SensorControl.c: while (xSemaphoreTake(dcdc_args.xSem, (TickType_t)10) == pdFALSE)
projects/cm_mcu/commands/SensorControl.c: xSemaphoreGive(dcdc_args.xSem);
Is your feature request related to a problem? Please describe.
It is not related to a specific problem. But it would be really handy if there would be sensors from the Command Module (CM) describing the type, revision and serial number, which can be read out by the OpenIPMC. This would also make it possible to read out those values even if the Zynq is not booting.
Describe the solution you'd like
Ideally, since OpenIPMC supports numerical sensors, one CM sensor for each piece of information could be used:
CM Type: Maybe this can be represented as an enum. For example, 0 -> Cornell CM, 1 -> MPI CM
CM Revision: The CM revision number can be provided by this sensor.
CM Serial: The CM serial number can be provided by this sensor.
With these CM sensors, the goal would be to see three additional sensors in the output of the ipmitool sensor
command.
Describe alternatives you've considered
One variation can be in the number of CM sensors to be added. It could be nice if there is a single CM sensor that represents all type, revision and serial information, but it is not clear how that can be easily encoded/decoded on the OpenIPMC side and displayed to the user.
Another alternative is to write these values to Zynq registers (which I believe most of it is already there), the downside would be then we won't be able to read these values if Zynq didn't boot.
Additional context
This is a rather low priority request, thanks for considering it and let us know if you have suggestions about this! I'll include @dgastler here as the original requester of the feature.
Reset the VU7P or KU15P from the CLI on the MCU.
We need to store the programs for initializing the clocks on the board so that the clocks are loaded with programs by default.
This issue depends on issue #123 being completed.
At MCU reboot and when prompted via the CLI (and possibly via a register write) the clock chips will need to be programmed via I2C by the MCU. So we need to prepare for this.
Steps
cm_mcu/projects/cm_mcu/InitTask.c
Line 36 in 4479f34
We might need more than one program for each clock interface, so we should allow for this both in how the data is stored in the EEPROM, how it is loaded by the MCU, and in the CLI interface
boot loader appears to no longer work when pointed at the ZYNQ UART. Strangely the CLI for forcing an update works fine over the ZYNQ UART.
issue : the 4-ch FFs on FPGA#2 have zero temperatures (at least the one on Apollo214). This must be a bug in the FW after FF task is removed. The issue was not present with old FW with FF task.
how to reproduce : go to apollo214 and execute ff_temp
with any latest MCU FW.
solution : not sure yet but it should have something to do with the MONI2C arguments for F2_* devices and how its values are stored.
Need to have a clean way of turning off the CDR circuit on the FF CLI
To turn off need to
Mapping of names to mux to FF addresses is in FireflyTask.c
Need a programmatic and CLI (and I2C) interface.
The power supply monitoring currently does not distinguish between readout of static quantities, such as configuration registers, and dynamic quantities, such as current, voltage, and temperature. The two tasks should be split and the static quantities read only once or infrequently (once/hour or something.) The code in question is the MonitorTask
.
One solution might be to adjust the MonitorTask
to take a frequency argument ; this would require that a semaphore be used to control access to the i2c controller (we already have to do this to avoid collisions with the snapshot
command line task and also the LGA80D initialization in the PowerSupplyTask
.
There would then be two monitor tasks for the power supplies (right now there is only one) with different arguments called.
Is your feature request related to a problem? Please describe.
We want to be able to reload the MCU firmware over UART1, which is the UART connected to the Zynq. while the TM4C1290NCPDT has a booatloader in the ROM, it is only connected to UART0. So we need to implement one in flash.
Describe the solution you'd like
sflash
example in Tivaware 'tools' folder.There are currently several different ways that I2C registers are accesssed in the code. It would be good to rationalize this to use only the interface that @rzouCERN created in I2CCommunication.c:
cm_mcu/projects/cm_mcu/I2CCommunication.h
Lines 20 to 24 in 79dfaba
These functions are wrappers around the code in common/smbus.c
. There is a lot of duplicated code; putting these in wrappers ought to allow us to shrink the size of the executable.
Note that there is a separate set of (very similar) functions in LocalTasks.c
, e.g.:
cm_mcu/projects/cm_mcu/LocalTasks.c
Lines 76 to 77 in 79dfaba
We should figure out if we can merge these two.
We will likely need to ensure that the following accesses are supported:
MonitorTask.c
and in LocalTasks.c
where the snapshot registers are manipulated and the LGA80D power supplies are initialized)FireflyTask.c
) as well as all places where the I2C muxes are manipulated. The muxes in particular are accessed all over. Presumably this also covers the ClockSynth.c
code.It is not obvious to me that all of these accesses are supported in the above code, and we should check that we need separate function calls. In the common/smbus.c
code there are different calls for SMBUS vs straight I2C interactions.
Describe the bug
CLI output repeated for some commands, seemingly the longer ones. EG adc
or help
.
To Reproduce
Bootloader should fall back to a known good version of the firmware
We should detect the first-time loading of the MCU and prompt the loading of the relevant information via the CLI.
I think what needs to be set are
Are these strings null-terminated?
202210271726 SRV INF LocalTasks.c:648:Getting Firefly 4-ch part (FPGA1): CRRNBY12024123M ,T
:202210271726 SRV INF LocalTasks.c:682:Getting Firefly 4-ch part (FPGA2) : CRRNBY12024123M
The issue : LocalTask.c is getting large and most of the stuff that makes it big is from firefly auxiliary functions.
The solution : We should separate FF-related functions and variables to another file.
Describe the bug
Turning off the power supply via pwr off
hangs the monitoring task in an infinite loop waiting for I2C commands to succeed. Hangs in infinite loop on call to I2CMasterBusy()
. TM4C129x family has timeout for I2C which can be used.
vTaskSuspend
in FreeRTOS. documentation here.% clkmon 5
Monitoring SI clock with id : }
REG_TABLE REG_ADDR BIT_MASK VALUE
Invalid clock chip 5 , the clock id options are r0a:0, r0b:1, r1a:2, r1b:3 and r1c:4
%
It looks like the test for valid input is done after the input is used (in this case the clock number) and hence some array is accessed past its end. This can cause problems since the read will continue until it hits a '\0'.
Add a CLI command that resets the MCU
Steps:
File refers to CommandLineTask.c
CLI_Command_Definition_t
object with the command name, the help string, the name of the function to get called, and the number of parameters (probably 0 here)BaseType_t command( char *pcWriteBuffer, size_t xWriteBufferLen, const char *pcCommandString )
vCommandLineTask()
, something like this: FreeRTOS_CLIRegisterCommand(&command );
The command should call SysCtlReset()
which is defined in driverlib/sysct.{h,c}.
Add received optical power to the monitoring of the 4 channel transceivers and the 12 channel receivers.
Based on the data sheets, neither the 14 G 12 channel receiver nor the CERN-B receiver have this information available.
The 25 G 12 channel receiver appears to have the 12 channel registers on Upper page 0x1. The data is a 16 bit unsigned integer calibrated to 0.1 uW/LSB. "The low byte within each pair is the MSB." The data is laid out starting at address 206/207 through 228/229 for channel 11 to channel 0, respectively. Register is called RSSI. No further information in v3 of the data sheet (page 65).
The 25 G 4 channel transceivers appear to have this on page 0x0, with the same data format. The addresses are starting at 34/35 for Ch 1 and end at 40/41 for channel 4 (opposite order from the 12 channel part, and here 1-based numbering.) This is based on v1 of the data sheet, on page 52.
We need to test the clock synthesizer chip. Sample code attached. Basic I2C reads and writes have been performed to the chip.
Si5340-RevD-Registers_no_amble.h.txt
Si5340-RevD-Registers.h.txt
From Charlie:
I have attached 2 configuration files exactly as they are generated by the SI labs "clock builder" program.
The difference is that the one named "..._no_amble" does not contain the pre-amble nor post-amble that must be sent to the chip. These missing chunks of settings are always the same, and a 300 milli-second delay is required after sending the pre-amble. You may decide that it would be easier to hard-code these into the MCU program, or you may decide to insert the delay wait after sending the pre-amble.
[...] I would not manipulate the output file from the clock builder [...]. I would us the file as generated and have my program that sends data to the MCU do the manipulation. [...]
The manipulation involves determining when the page changes and inserting a write of the new page to address 0x01. The data in the file fills an array of structures. The first data in the structure is a 16-bit address. If the high byte is different than the high byte of the previous address, use the value of the high byte to cause a page change. Always send the register number stored in the low byte of the address along with the corresponding data.
Following additional readout should be added, to support work at BU. This is challenging because there are at least three different SamTec devices (4 channel transceivers @ 25 Gbps, 12 channel Tx and 12 channel Rx at 14 Gbps, and 12 channel Tx and Rx at 25 Gbps.) They have slightly different memory maps/register addresses.
For this part you need to
These data should be sent to the Zynq for monitoring. For this part of the task we need the following.
cm_mcu/projects/cm_mcu/ZynqMonTask.c
Line 262 in 79dfaba
The I2C slave and the task that sends data to the Zynq has implicitly embedded in the code a memory map. This needs to be broken out and made more maintainable.
We need to provide an easier way to turn on the 3.V for the fireflies, and it also needs to be turned off before the 3.3V is turned off.
Need to have an I2C slave to respond to the IPMC.
Describe the bug
On apollo09 the SYSMON on the KU15P doesn't come up correctly when unprogrammed. The FPGA reports -280C on JTAG and the I2C transactions fail. the MCU just pushes the one valid reading it appears to get to the grafana/zynq, though, rather than marking the value as stale.
also the MonitorTask just uses SuppressedPrint
to log the errors to the console. but unless you're logged in you cannot see the errors in any other way/
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Errors should be logged and no stale data sent to grafana/Zynq.
cm_mcu/projects/cm_mcu/CommandLineTask.c
Lines 943 to 951 in c50dedb
I think there are two issues in this function
m
overruns its boundary when copied>SCRATCH_SIZE
if you look at e.g. adc_ctl
we handle this by returning pdTRUE
when we are close to overrunning the buffer; the CLI tool will keep calling the function until all values have been copied. The signaling mechanism is the static variable whichadc
which keeps track of where you are in the output loop.cm_mcu/projects/cm_mcu/CommandLineTask.c
Lines 507 to 527 in c50dedb
can you fix the second issue for sure and also check the other functions if they have this issue? I've been sloppy of not checking this for small functions...
Describe the bug
uptime seems to roll over after less than 1000 minutes (not clear about reason)
To Reproduce
Steps to reproduce the behavior:
It ought to be ok; TickType_t
is AFAIK a signed 32 bit integer. The number is multiplied by some constants; hopefully the compiler avoids unneeded up- and down-multipliers. According to my estimate the overall scaling is (1000/100)*(1/60000). The tick rate is 100 Hz. So this should reduce to 1/6000, hopefully at compile time. Max is like 2x10^9 for a 32 bit signed integer, so the max number of minutes should be like 33k. What am I doing wrong here?
cm_mcu/projects/cm_mcu/CommandLineTask.c
Lines 1112 to 1118 in 36b40d7
issue : @rzouCERN noticed a weird behavior of ff xmit on all
and ff xmit off all
commands with REV2 board (CM 203) on Apollo205. The current version is
% version
Version commit date 2022-09-20 22:51:22 -0400 (HEAD -> hotfix/rev1, origin/hotfix/rev1) v0.99.1-18-g823cacb-dirty
regular build
built at 15:49:59, Sep 21 2022.
basically, the FFs seem to always be disabled. That could be explained by this line in the code (also for other places) that also exists in the master branch. This seems to skip the line(s) with "on" by exiting the scope too soon.
solution : fix this bug. However, even if this bug is fixed, I am still not sure what would be an onset of commands to test. I have tried writing/reading from the register 0x34 (Transmit Channel Disables) directly but got confused by the output that I would expect from turning on disabled transmit link:
% i2cwr 4 0x50 1 34 2 0
i2cwr: W to addr 0x50, reg 0x34, val=0x00000000 (2 bytes)
% i2crr 4 0x50 1 34 2
i2cr: add: 0x50, reg 0x34: value 0x00000000 (2 bytes)
% i2cwr 4 0x50 1 34 2 3ff
i2cwr: W to addr 0x50, reg 0x34, val=0x000003ff (2 bytes)
% i2crr 4 0x50 1 34 2
i2cr: add: 0x50, reg 0x34: value 0x00000000 (2 bytes)
it should resemble the purpose of this code if it works, and I was not sure why we set 0x3ff as a value of this register when it's off when this value seems to flip 10 bits up rather than 8 bits of this register.
On Rev 2 there will be a 32 kHz oscillator for time keeping (needed for error logging.) I need to add a) a mechanism to set the clock, from the CLI and probably from an I2C slave, and b) the actual code for keeping time (presumably with a timer counter interrupt.)
Right now there is a GenericAlarmTask
with callbacks. The only implementation of that task is for temperature out of range.
We should probably consider an additional alarm task for voltages out of range, and current out of range.
Need to look at the error logger data format again; the 7 bits are not enough for the power supply mask. Options are
Currently manual loading of the clocks or loading of the EEPROM won't work unless you stop the clock monitoring tasks. Need to think of a clean way to allow both.
Possible solutions:
CERN TIF board
error log output of SM05-mated MCU.
[...]
00 00:00 1 Restart (EXT)(POR)
00 09:01 1 Power On
00 00:00 1 Assertion failed (pc) 0x00 0x00 0xaf 0x8e
00 00:00 1 Restart (SW)(EXT)(POR)
01 03:43 1 Power On
08 14:38 1 Power Off - Manual
00 00:00 1 Restart (EXT)(POR)
00 22:00 1 Power On
00 00:00 1 Power On
00 00:00 1 Restart (EXT)
00 00:39 1 Power Off - Manual
00 00:39 1 Power On
00 00:00 1 Power On
00 00:00 1 Restart (EXT)
00 00:00 1 Assertion failed (pc) 0x00 0x00 0xaf 0x8e
00 00:00 1 Power On
00 00:00 1 Restart (SW)(EXT)
[...]
% version
Version v0.27 built at 17:48:35, Sep 11 2020.
pc = 0xaf8e
Is your feature request related to a problem? Please describe.
SI5341 and SI5395 chips have status registers (LOS, OOF, etc) that we should monitor when the chips are being used.
For SI5341: see Table 4.5 : https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/reference-manuals/Si5341-40-D-RM.pdf
For SI5395: see Section 5.3: https://www.skyworksinc.com/-/media/SkyWorks/SL/documents/public/reference-manuals/si5395-94-92-family.pdf
For the sticky flags we should also write 0s to them at the end of programming.
The interrupt handler is currently like 600 lines long and probably not reentrant, due to the calls to SMBusMasterIntProcess
. This should be replaced by some sort of a signaling mechanism from the task to the I2C/SMBUS call.
Add a few commands to the samtec firefly task.
Some more background about the SamTec Firefly code and how the board is organized.
There are a few different types of Firefly devices on the command module.
The register maps are different on all these devices, so we have to be aware of what kind of a device we are talking about.
There are two separate I2C controllers used to control the Firefly modules: one to control those connected to the KU15P and one to control those connected to the VU7P. The I2C modules also sit behind I2C bus expanders since many of them have the same I2C address. The addressing for the devices is defined in this code location.
cm_mcu/projects/cm_mcu/FireFlyTask.c
Lines 50 to 76 in 79dfaba
Currently there are several different parts to the FireFlyTask.c
code that do the following.
Here is a proposed plan of action
cm_mcu/projects/cm_mcu/FireFlyTask.c
Line 295 in 79dfaba
cm_mcu/projects/cm_mcu/FireFlyTask.c
Lines 438 to 443 in 79dfaba
Goal:
Allow finer grained control of the samtec firefly devices.
Currently can only turn the transmitters on the lasers on or off en masse, or turn on and off the CDR circuitry en masse.
Would like two things to move forward:
Describe the bug
ADC inputs 16-19 are bogus
To Reproduce
read out ADC inputs
** Tests:
@pwittich is exploring that the analog inputs that don’t work are the ones with with an alternate function for the UART that we use for the front panel communication. In order to select the analog pins a few things must be done.
@CRStrohman shorted the ADC inputs, one at a time, to either GND or 0.85 volts. I ran the "ADC" command each time and observed what, if anything, changed.
For all but 4 channels, the ADC reading of the shorted channel was either 0v or 0.85v, as expected. In addition, none of the other channels was influenced.
There were 4 channels where the reported value did not go to 0v nor 0.85v, but reported some other value. These 4 channels were 16, 17, 18, and 19. Also, these 4 channels were sometimes affected by changes on other channels.
Signal Name
VCC_3V3
ADC Channel
16
Normal readout
2.49
Readout when shorted to 0.0v
2.49
Readout when shorted to 0.85v
2.50
Notes
Signal Name
V_MGTY2_VCCAUX
ADC Channel
17
Normal readout
1.72
Readout when shorted to 0.0v
1.72
Readout when shorted to 0.85v
1.72
Notes
Signal Name
V_MGTY2_AVCC
ADC Channel
18
Normal Readout
1.24
Readout when shorted to 0.0v
1.21
Readout when shorted to 0.85v
1.24
Notes
Signal Name
V_MGTY2_AVTT
ADC Channel
19
Normal Readout
1.24
Readout when shorted to 0.0v
1.24
Readout when shorted to 0.85v
1.24
Notes
issue : there is a hardcode in initTask for loading a clock config from eeprom to the CM board, while the detection of a garbage eeprom has been implemented here.
Maybe I forgot to remove this hardcode accordingly?
resolve: will try removing this hardcode and check if the detection of garbage eeprom will quit the initialization as expected.
Cleanup CLI to make it easier to parse by computer programs.
Alternatively, implement I2C slave for this (can we have Zynq also be an I2C master?)
Need to get ready for Rev 2 of the CM. This issue is to track what needs to be done.
Rev2b will have a larger EEPROM where the address is more than one byte. Need to adapt to this.
First pass might be to just change the commands here to allow for multi-byte addresses
cm_mcu/projects/cm_mcu/I2CCommunication.c
Line 110 in 4479f34
that is,
reg_address
from a uint8_t to an array (like the data
field)nbytes_addr
similar to the nbytes
field which counts how many address bytes there arecm_mcu/projects/cm_mcu/I2CCommunication.c
Lines 129 to 132 in 4479f34
Data sheet for new EEPROM attached to this issue.
There is a board with such an EEPROM available somewhere, @CRStrohman can tell us.
Detailed prescription from CRS:
I've attached the datasheet, and here is a quick summary of writing one
byte to a random address or reading one byte from a random address. I
don't think we can generate these sequences with the current commands.
There are also "page write" (page 16), "current address read" (page 20),
and "sequential read" (page 22).
Write one random byte (page 15):
- send START
- send device address byte
- wait for ACK
- send high address byte
- wait for ACK
- send low address byte
- wait for ACK
- send data byte
- wait for ACK
- send STOP
- EEPROM is unavailable for Twc (5 msec max)
Read one random byte (page 21):
- send START
- send device address byte
- wait for ACK
- send high address byte
- wait for ACK
- send low address byte
- wait for ACK
- send RESTART
- send device address
- wait for ACK
- read data byte
- send NACK (I think the picture on page 21 is wrong at this point)
- send STOP
We will probably want "page write" and "sequential read" for storing and
reading clock chip configuration data. The "page write" will probably
want a command-line function that is driven from the Zynq. The 5 msec
write cycle is incurred for either a single byte or an entire 128 byte
page. I don't think we need a command-line function for "sequential read".
Current code allows to switch between the CLI on the front panel and the Zynq by changing two lines of code (CLI_UART
in FreeRTOSConfig.h
). It does require a recompile.
New idea is to have two CLIs running at the same time.
void *pvparameters
argument for the CLI taskCommandLineTask.c
is too long. Proposal is to figure out a logical split of the file into separate files. CommandLineTask.c
should presumably hold the actual FreeRTOS task and the interface to the micro-read line library and the functions that implement the tasks should be split into a few separate files grouped by some logical principle
When commands cmpwrdown cmpwerup are called, from time to time cmpwerup will fail with the message:
CM 1 failed to powered up in time
And PWR_GOOD appears to be 0.
To Reproduce
Proposal is to move the equivalent of the python script into the firmware, as well as hard-coding the data for the 156 MHz clock into firmware as well. Less flexible than the python script but probably also less buggy.
Need to clean up the register list for the firefly task, and unify all accesses to firefly registers through the common interface of the accessor functions to enable the use of semaphores to be able to access the external I2C registers.
Describe the bug
fpga done
does not appear to show the correct state of the done bit
reset_fpga k
does not reset f1 as expected.
Is your feature request related to a problem? Please describe.
There are a lot of LGA80Ds on our board. The snapshot on each page of the device comes with a factory value that needs to be cleared first in order for it to work. It gets quite tedious to clear them up one by one.
Describe the solution you'd like
A snapshot all 1
function would be very helpful. It could also be helpful to be able to read them all at once with snapshot all 0
.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.