コード例 #1
0
        public void ReadFirmware()
        {
            if (IVFERHandshake())
            {
                firmware_image = new SCP_FLASH_IMAGE(ProbeMemLayout());

                switch (firmware_image.FlashSize)
                {
                case RomSize._216k:
                    firmware_image.Write(0x02000, BlockRead(0x002000, 0x00FFFF));
                    firmware_image.Write(0x12000, BlockRead(0x012000, 0x01DFFF));
                    firmware_image.Write(0x82000, BlockRead(0x082000, 0x08FFFF));
                    firmware_image.Write(0x92000, BlockRead(0x092000, 0x09FFFF));
                    break;

                case RomSize._112k:
                    firmware_image.Write(0x12000, BlockRead(0x012000, 0x01FFFF));
                    firmware_image.Write(0x82000, BlockRead(0x082000, 0x08FFFF));
                    break;

                case RomSize._88k:
                    firmware_image.Write(0x12000, BlockRead(0x012000, 0x019FFF));
                    firmware_image.Write(0x82000, BlockRead(0x082000, 0x08FFFF));
                    break;

                default:
                    break;
                }
                if (!Checksum())
                {
                    throw new Exception("Checksum of firmware read failed!");
                }
                //System.IO.File.WriteAllBytes("read.bin", firmware_image.ToSCTBIN());
            }
        }
コード例 #2
0
        public void WriteFirmware(bool TransferVIN = true)
        {
            firmware_image             = new SCP_FLASH_IMAGE(RomSize._216k);
            firmware_image.SCTBINImage = System.IO.File.ReadAllBytes("read.bin");

            if (IVFERHandshake())
            {
                if (ProbeMemLayout() != firmware_image.FlashSize)
                {
                    throw new Exception("Loaded firmware image does not match target hardware!");
                }

                SCP_VIN_Parser PCM_VIN = new SCP_VIN_Parser(ReadVINBlock());
                //Write Vin to disk

                if (TransferVIN)
                {
                    firmware_image.VIN.PATS_Key = PCM_VIN.PATS_Key;
                    firmware_image.VIN.VIN      = PCM_VIN.VIN;
                }

                EraseFlash();

                switch (firmware_image.FlashSize)
                {
                case RomSize._88k:
                    ProgramBank(0x12000, firmware_image.GetBank(1));
                    ProgramBank(0x82000, firmware_image.GetBank(8));
                    break;

                case RomSize._112k:
                    ProgramBank(0x12000, firmware_image.GetBank(1));
                    ProgramBank(0x82000, firmware_image.GetBank(8));
                    break;

                case RomSize._216k:
                    ProgramBank(0x02000, firmware_image.GetBank(0));
                    ProgramBank(0x12000, firmware_image.GetBank(1));
                    ProgramBank(0x92000, firmware_image.GetBank(9));
                    ProgramBank(0x82000, firmware_image.GetBank(8));
                    break;
                }
                if (!Checksum())
                {
                    throw new Exception("Checksum of firmware write failed!");
                }
            }
        }