@Gabriel Gallardo: Just a quick response to the first part of your question. I have a meeting in a couple of minutes but afterward I'll look at the rest of your post and respond. Note that the host computer talks to caravel through the FTDI chip by talking to the SPI on pins 1-4. If you run a program on the flash which changes the function of pins 1-4, then you lose access to the chip because the GPIOs will change state soon after the chip powers up or comes out of reset. The solution to this is to hold down the reset button on the board and then power cycle the chip (by unplugging and re-plugging the USB cable) while you still have the reset button pressed. Keep the reset button held down while you start the flashing. Once the flash is erasing, you can release the button; the first part of the flashing program is to put the chip into reset through the SPI interface and hold it in reset. Both the reset and power cycle are needed. Which is why, generally, it works better to write programs that maintain the default state of GPIOs 1 to 4, so that you don't have to do the complicated reset + power cycle thing every time.