diff --git a/src/gowin.cpp b/src/gowin.cpp index c2cb82d..afccb56 100644 --- a/src/gowin.cpp +++ b/src/gowin.cpp @@ -80,8 +80,9 @@ Gowin::Gowin(Jtag *jtag, const string filename, const string &file_type, std::st bool verify, int8_t verbose): Device(jtag, filename, file_type, verify, verbose), SPIInterface(filename, verbose, 0, verify, false, false), - _idcode(0), is_gw1n1(false), is_gw2a(false), is_gw1n4(false), - is_gw5a(false), _external_flash(external_flash), + _idcode(0), is_gw1n1(false), is_gw1n4(false), is_gw1n9(false), + is_gw2a(false), is_gw5a(false), + _external_flash(external_flash), _spi_sck(BSCAN_SPI_SCK), _spi_cs(BSCAN_SPI_CS), _spi_di(BSCAN_SPI_DI), _spi_do(BSCAN_SPI_DO), _spi_msk(BSCAN_SPI_MSK) @@ -168,13 +169,6 @@ bool Gowin::detectFamily() { _idcode = _jtag->get_target_device_id(); - /* erase and program flash differ for GW1N1 */ - if (_idcode == 0x0900281B) - is_gw1n1 = true; - /* erase and program flash differ for GW1N4, GW1N1Z-1 */ - if (_idcode == 0x0100381B || _idcode == 0x100681b) - is_gw1n4 = true; - /* bscan spi external flash differ for GW1NSR-4C */ if (_idcode == 0x0100981b) { _spi_sck = BSCAN_GW1NSR_4C_SPI_SCK; @@ -189,6 +183,16 @@ bool Gowin::detectFamily() * algorithm that is not yet supported. */ switch (_idcode) { + case 0x0900281B: /* GW1N-1 */ + is_gw1n1 = true; + break; + case 0x0100381B: /* GW1N-4B */ + case 0x0100681b: /* GW1NZ-1 */ + is_gw1n4 = true; + break; + case 0x0100481B: /* GW1N(R)-9, although documentation says otherwise */ + is_gw1n9 = true; + break; case 0x0000081b: /* GW2A(R)-18(C) */ case 0x0000281b: /* GW2A(R)-55(C) */ _external_flash = true; diff --git a/src/gowin.hpp b/src/gowin.hpp index 42d373f..0b15855 100644 --- a/src/gowin.hpp +++ b/src/gowin.hpp @@ -132,8 +132,9 @@ class Gowin: public Device, SPIInterface { std::unique_ptr _mcufw; uint32_t _idcode; bool is_gw1n1; - bool is_gw2a; bool is_gw1n4; + bool is_gw1n9; + bool is_gw2a; bool is_gw5a; bool skip_checksum; /**< bypass checksum verification (GW2A) */ bool _external_flash; /**< select between int or ext flash */