Hi, I am currently trying to bootload the caravel CPU from external SPI Flash but cant seem to get it to work. I am not using the breakout board provided but instead a custom PCB that gives me direct access to the chip’s pins and a
W25Q16 flash breakout board from Adafruit. All I am trying to do at the moment is set the first 8 IO pins to outputs and then set them to high, which I am monitoring using a
Digilent AD3. This is essentially a “Hello World!” type sanity check to make sure things are working. My current workflow is to take a very simple main.c file (which I will attach) and compile it to binary using the riscv64-elf-gcc toolchain. I then flash the main.bin file onto the W25Q16, which I verify is correct by reading back the data. This is then connected to the QSPI Flash Interface of the Caravel chip,
as documented here. I then turn on appropriate power (1.8V & 3.3V), run a clock from the AD3, and reset the device by toggling the
resetb
line (
seen here). I am including a screenshot video of the test. DIO10 in the video is
resetb
, DIO11 is
fcsb
, and DIO12 is
fclk
. DIO0 is high in the video because it is connected to CSB (the DIO pin labels are slightly offset from their labeling on the Caravel chip, however this shouldnt affect the functionality, we would just expect to see DIO[0:5] go high instead). We see in the video what I believe is the expected bootup procedure of the CPU, however it does not appear to fetch the instructions and does not set the expected outputs to high. Is there anything wrong with this overall workflow, or perhaps anything I am missing? I have tried clock speeds from 1MHz down to 1kHz but it hasnt changed anything. Thanks!!