I am currently working on a Netgear router having MX25L1606E rom chip, my goal is to extract firmware for reverse engineering but flashrom don't have support for it. So question is how someone can read data from rom by making their own program or script. I've tried with buspirate but I don't know what would be specific SPI mode settings to read data out of this chip.
Firstly you would like to know if someone has already implemented the required protocol to read that flash memory model. You should try to search on your favorite engine queries like "'model' dump" or "dumping 'model' with buspirate" , where 'model' IS the name of your chip.
If you cannot find anything, you Will have to do It by yourself.
I just searched for "MX25L1606E datasheet" and i found, in the first result, all the needed details about your particular chip: datasheet
There you can find that It uses the SPI protocol, and the supported commands (READ, WRITE, etc) as well as others that may be important.
Now you need a hardware that can speak that protocol. Bus pirate is great and has documentation. You just need to read the datasheet to discover which SPI Mode is used.
You could also repurpose an Arduino UNO or Arduino UNO clone board (or any more powerful Arduino version). Arduino UNO can speak SPI. As an example, I did that to read the SPI flash of Nintendo DS cartridges for example. You would like to use the ICSP pins of the Arduino to connect to your memory, send commands and receive data, store it into the arduino memory, and send it to your PC over the serial connection of the Arduino.
Please note that Arduino (UNO) boards have little memory available, so you need to read the memory in smaller chunks.