In order to use J-Flash SPI, either a higher-end J-Link model (J-Link PLUS or higher, click here for the debug probe model overview) or a Flasher Production Programmer (click here for the flash programmer model overview) is needed.
SmartRF Flash Programmer 2 can be used to program the flash memory in Texas Instruments ARM based low-power RF wireless MCUs over the debug and serial interfaces. The flash programmer includes both a graphical user interface and a command line interface.
flashrom is a utility for identifying, reading, writing, verifying and erasing flash chips. It is designed to flash BIOS/EFI/coreboot/firmware/optionROM images on mainboards, network/graphics/storage controller cards, and various other programmer devices.
I'm pretty familiar with programming AVR using the AVRISP mkII or the USBTiny, is writing data to flash done with the same programmer? I haven't been able to find anything when looking for SPI flash memory programmers specifically.
If you are simply looking for a way to program the Winbond SPI flash with "pre-loaded" data that your microcontroller would read for use when it is running then what you will want to look into is a programmer that can do in-circuit programming of the SPI Flash chip. This also known as in-system-programming (ISP).
One choice is the programmer from DediProg. This USB connected device can program in circuit if you design your board correctly. They even sell an adapter clip that can attach into the SOW-16 package without having to design in a separate programming header on your board. DediProg has application information bulletins available to help with correct design for in circuit use. The main strategy for the design is to find a simple way to isolate the SPI interface drivers in your MCU system so that they do not interfere with the drivers in the SPI programming pod. The simplest way to do this is to put series resistors in the MCU driven lines between the MCU and the SPI Flash. The programmer would connect on the SPI flash side of the series resistors. Alternate methods could include adding a MUX or analog switches in the driven interface lines. An even more clever scheme is to add a "programming enable" input to the MCU that makes the software disconnect all the SPI I/Os from the SPI Flash chip (i.e. make all those GPIOs as inputs).
EDIT: Being a follow up, I would really recommend one of Atmels own SPI flash memories, since most of them already has written open available code for them. Looking at this post from AVRFreaks will provide you with code for some of Atmels AT45xxxx serial flash chips.
The following information is available from the timing diagrams in datasheets of SPI Flashes, but sometimes folks overlook bits. All commands and data are issued to the SPI flash using the SPI bus. The sequence to read a SPI Flash is:
I purchased a "FlashCAT" programmer from Embedded Computers for about $30 US. It was surprisingly easy to connect to the PC via USB and write files to the Winbond flash memory. The methods and programmers in other answers are probably just as good, some more expensive or DIY, but this is a cheap and simple way that fits what I was seeking.
The FlashCAT programmer is at left, connected to USB. It's running the SPI programming firmware (as opposed to JTAG) and supplying power to the flash memory. The supplied power is selectable (3.3V or 5V) with a jumper.
Somewhere I have a board from a project which has both an ATTINY and an SPI flash, and uses as an Arduino as a readily available "programmer". A slight modification of the ISP sketch is used to program the MCU with avrdude, then a custom utility sends a sequence which puts the sketch in a special mode and writes blocks of data to the SPI flash.
Because erase cycles are slow, the large block sizes used in flash memory erasing give it a significant speed advantage over non-flash EEPROM when writing large amounts of data. As of 2019,[update] flash memory costs much less[by how much?] than byte-programmable EEPROM and had become the dominant memory type wherever a system required a significant amount of non-volatile solid-state storage. EEPROMs, however, are still used in applications that require only small amounts of storage, as in serial presence detect.
Compared to NOR flash, replacing single transistors with serial-linked groups adds an extra level of addressing. Whereas NOR flash might address memory by page then word, NAND flash might address it by page, word and bit. Bit-level addressing suits bit-serial applications (such as hard disk emulation), which access only one bit at a time. Execute-in-place applications, on the other hand, require every bit in a word to be accessed simultaneously. This requires word-level addressing. In any case, both bit and word addressing modes are possible with either NOR or NAND flash.
Despite the additional transistors, the reduction in ground wires and bit lines allows a denser layout and greater storage capacity per chip. (The ground wires and bit lines are actually much wider than the lines in the diagrams.) In addition, NAND flash is typically permitted to contain a certain number of faults (NOR flash, as is used for a BIOS ROM, is expected to be fault-free). Manufacturers try to maximize the amount of usable storage by shrinking the size of the transistors.
Memory cells in different vertical layers do not interfere with each other, as the charges cannot move vertically through the silicon nitride storage medium, and the electric fields associated with the gates are closely confined within each layer. The vertical collection is electrically identical to the serial-linked groups in which conventional NAND flash memory is configured.
Serial flash is a small, low-power flash memory that provides only serial access to the data - rather than addressing individual bytes, the user reads or writes large contiguous groups of bytes in the address space serially. Serial Peripheral Interface Bus (SPI) is a typical protocol for accessing the device. When incorporated into an embedded system, serial flash requires fewer wires on the PCB than parallel flash memories, since it transmits and receives data one bit at a time. This may permit a reduction in board space, power consumption, and total system cost.
With the increasing speed of modern CPUs, parallel flash devices are often much slower than the memory bus of the computer they are connected to. Conversely, modern SRAM offers access times below 10 ns, while DDR2 SDRAM offers access times below 20 ns. Because of this, it is often desirable to shadow code stored in flash into RAM; that is, the code is copied from flash into RAM before execution, so that the CPU may access it at full speed. Device firmware may be stored in a serial flash chip, and then copied into SDRAM or SRAM when the device is powered-up. Using an external serial flash device rather than on-chip flash removes the need for significant process compromise (a manufacturing process that is good for high-speed logic is generally not good for flash and vice versa). Once it is decided to read the firmware in as one big block it is common to add compression to allow a smaller flash chip to be used. Since 2005, many devices use serial NOR flash to deprecate parallel NOR flash for firmware storage. Typical applications for serial flash include storing firmware for hard drives, Ethernet network interface adapters, DSL modems, etc.
I also noticed an error (I believe) in the CC3220MOD datasheet. The FLASH_SPI_MISO pin 13 is shown as type 'input', however the schematic lib shows it as an output. Vice versa with FLASH_SPI_MOSI pin 17. The module flash chip (MX25R3235F) is a slave to the CC3220SF chip and any SPI Host adapter should be the master (backed up by the CLK and CS lines being inputs as well). The schematic component from the ref design shows 13 as output and 17 as input.
The Dediprog SF100 is a high-speed in-system programmer (ISP) for programming serial flash memory devices. It is a USB-based programmer that supports a wide range of serial flash devices, including SPI NOR flash, SPI NAND flash, and eMMC devices.To use the SF100 programmer, you will need to install the SF100 software on your computer. This software provides a user-friendly interface for configuring the programmer and programming your serial flash devices. You can find more information and download the software from the Dediprog website.Once the software is installed, you can connect the SF100 programmer to your computer using the USB cable provided. Then, you can use the software to select your serial flash device, configure the programming options, and start the programming process. The SF100 programmer is capable of programming at high speeds, making it suitable for use in high-volume production environments.
Production Programmer: A standalone tool similar to the flash programmer and Simplicity Commander but targeted more for rapid production programming of many devices. For more information see the MCU Software pages.
The problems with this technique are obtaining a diode, removing the board from the case, and then attaching keyboard/display or serial to interact with it. But once you have done this, the programmer can be used to recover numerous target machines.
PRESTO USB programmerVery fast in system programmer, self powered from USB bus, with enhanced ICSP programming capability. This USB programmer supports a wide range of serial memory, including Serial EEPROM, Serial Flash and Dataflash,
The communication format between the programmer and 78K0S device is based on ordinary asynchronous serial transfer so that it can be controlled via a PC serial port. Because there is a unique feature that the programming adapter is attached to oscillator pins, a defined sequence must be followed to put the device into programming mode. When perform a flash programming with a resonator on the target board, the clock frequency must not be equal each other for proper operation. 2b1af7f3a8