Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
8 years ago

MAX 10 Flash programming

Hi,

In MAX 10 FPGA, when the CFM will program ? What are the signals are related to flash ? CONFIG_SEL pin is used to select the CFM0 and CFM1 but, how the process will work ? Please explain if anyone knows.

Thanks in advance.

Regards,

KVL

11 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    A little bit of overview info here, in chapter 2: https://www.altera.com/literature/ug/ug_usb_blstr.pdf

    There is very little public documentation around on what goes in the CPLD as far as features/functionality. However, the Altera JAM STAPL (https://www.altera.com/support/support-resources/download/programming/jam.html) player does/did support using the USB Byte Blaster in simple JTAG bit banging mode. From the header comments in the jamstub.c routine:

    /* The following code doesn't fully utilize the possibilities of the
     * USB-Blaster. It only buffers data up to a maximum packet size of 2 bytes.
     * The normal maximum packet size is up to 64 bytes (but would require a
     * major change to the logic of this program).
     *
     * Actually, the USB-Blaster offers a byte-shift mode to transmit up to 504 data
     * bits (bidirectional) in a single USB packet. A header byte has to be sent as
     * the first byte in a packet with the following meaning:
     *
     *   Bit 7 (0x80): Must be set to indicate byte-shift mode.
     *   Bit 6 (0x40): If set, the USB-Blaster will also read data, not just write.
     *   Bit 5..0:     Define the number N of following bytes
     *
     * All N following bytes will then be clocked out serially on TDI. If Bit 6 was
     * set, it will afterwards return N bytes with TDO data read while clocking out
     * the TDI data. LSB of the first byte after the header byte will appear first on TDI.
     */
    /* Simple bit banging mode:
     *
     *   Bit 7 (0x80): Must be zero (see byte-shift mode above)
     *   Bit 6 (0x40): If set, you will receive a byte indicating the state of TDO in return.
     *   Bit 5 (0x20): Output Enable/LED.
     *   Bit 4 (0x10): TDI Output.
     *   Bit 3 (0x08): nCS Output (not used in JTAG mode).
     *   Bit 2 (0x04): nCE Output (not used in JTAG mode).
     *   Bit 1 (0x02): TMS Output.
     *   Bit 0 (0x01): TCK Output.
     *
     * For transmitting a single data bit, you need to write two bytes. Up to 64
     * bytes can be combined in a single USB packet.
     * It isn't possible to read a data without transmitting data.
     */
    

    I have used this code as part of a custom JTAG scanner that employed the Altera USB Blaster as the hardware interface.