コード例 #1
0
        public virtual byte[] ReadMemory(MemSource memType, int startAddress, int maxSize, bool breakOnEraseBlock = false)
        {
            var flashbuf    = new byte[maxSize];
            int bytesReaded = 0;
            int bytesToRead = maxSize;
            int blockSize   = 200;

            while (bytesToRead > 0)
            {
                if (bytesToRead < blockSize)
                {
                    blockSize = bytesToRead;
                }

                LoadAddress(startAddress);
                var blockbuf = new byte[blockSize];
                ReadPage(memType, blockSize, ref blockbuf);
                if (breakOnEraseBlock && blockbuf.All(v => v == 0xFF))
                {
                    break;                                                    //erased block found
                }
                Array.Copy(blockbuf, 0, flashbuf, bytesReaded, blockSize);

                bytesReaded  += blockSize;
                startAddress += blockSize;
                bytesToRead  -= blockSize;
                NotifyReadProgress(bytesReaded);
            }

            Array.Resize(ref flashbuf, bytesReaded);
            return(flashbuf);
        }
コード例 #2
0
ファイル: USBasp.cs プロジェクト: gsmrana/AVR-USBasp-Burner
        public override void WriteMemory(MemSource memType, int startAddress, int pageSize, byte[] databuf)
        {
            if (memType == MemSource.EEPROM)
            {
                base.WriteMemory(memType, startAddress, pageSize, databuf);
                return;
            }

            int bytesWritten = 0;
            int bytesToWrite = databuf.Length;
            int blockSize    = ASPConst.USBASP_RW_BLOCKSIZE;
            int blockFlag    = ASPConst.USBASP_BLOCKFLAG_FIRST;

            while (bytesToWrite > 0)
            {
                if (bytesToWrite <= blockSize)
                {
                    blockSize  = bytesToWrite;
                    blockFlag |= ASPConst.USBASP_BLOCKFLAG_LAST;
                }

                // paged write
                var param = (pageSize & 0xFF);                                  //lsb
                param |= ((blockFlag & 0x0F) + ((pageSize & 0xF00) >> 4)) << 8; //msb, TP: Mega128 fix
                var blockbuf = new byte[blockSize];
                Array.Copy(databuf, bytesWritten, blockbuf, 0, blockSize);
                WriteUsbEndpointOut(ASPCMD.USBASP_FUNC_WRITEFLASH, blockbuf, startAddress, param, blockSize);

                blockFlag     = 0;
                bytesWritten += blockSize;
                startAddress += blockSize;
                bytesToWrite -= blockSize;
                NotifyWriteProgress(bytesWritten);
            }
        }
コード例 #3
0
        protected override void ReadPage(MemSource source, int size, ref byte[] data)
        {
            var memType = (source == MemSource.Flash) ? 'F' : 'E';
            var i       = 0;
            var cmd     = new byte[5];

            cmd[i++] = StkCommand.CMD_READ_PAGE;
            cmd[i++] = MSB16(size);
            cmd[i++] = LSB16(size);
            cmd[i++] = (byte)memType;
            cmd[i++] = StkCommand.CRC_EOP;
            data     = ExecuteCommand(cmd, size);
        }
コード例 #4
0
        protected override void WritePage(MemSource source, int size, byte[] data)
        {
            var memType = (source == MemSource.Flash) ? 'F' : 'E';
            var i       = 0;
            var cmd     = new byte[5 + size];

            cmd[i++] = StkCommand.CMD_PROG_PAGE;
            cmd[i++] = MSB16(size);
            cmd[i++] = LSB16(size);
            cmd[i++] = (byte)memType;
            Array.Copy(data, 0, cmd, i, size);
            cmd[cmd.Length - 1] = StkCommand.CRC_EOP;
            ExecuteCommand(cmd, 0);
        }
コード例 #5
0
ファイル: STK500v2.cs プロジェクト: gsmrana/AVR-USBasp-Burner
        protected override void WritePage(MemSource source, int size, byte[] data)
        {
            var cmd = new byte[10 + size];

            if (source == MemSource.Flash)
            {
                cmd[0] = Stkv2Command.CMD_PROGRAM_FLASH_ISP;
            }
            else
            {
                cmd[0] = Stkv2Command.CMD_PROGRAM_EEPROM_ISP;
            }
            cmd[1] = MSB16(size);
            cmd[2] = LSB16(size);
            Array.Copy(data, 0, cmd, 10, size);
            ExecuteCommand(cmd, 2);
        }
コード例 #6
0
ファイル: STK500v2.cs プロジェクト: gsmrana/AVR-USBasp-Burner
        protected override void ReadPage(MemSource source, int size, ref byte[] data)
        {
            var cmd = new byte[3];

            if (source == MemSource.Flash)
            {
                cmd[0] = Stkv2Command.CMD_READ_FLASH_ISP;
            }
            else
            {
                cmd[0] = Stkv2Command.CMD_READ_EEPROM_ISP;
            }
            cmd[1] = MSB16(size);
            cmd[2] = LSB16(size);
            var response = ExecuteCommand(cmd, size + 3);

            Array.Copy(response, 2, data, 0, size);
        }
コード例 #7
0
        public virtual void WriteMemory(MemSource memType, int startAddress, int pageSize, byte[] databuf)
        {
            int bytesWritten = 0;
            int bytesToWrite = databuf.Length;
            int blockSize    = pageSize;

            while (bytesToWrite > 0)
            {
                if (bytesToWrite < blockSize)
                {
                    blockSize = bytesToWrite;
                }

                LoadAddress(startAddress);
                var blockbuf = new byte[blockSize];
                Array.Copy(databuf, bytesWritten, blockbuf, 0, blockSize);
                WritePage(memType, blockSize, blockbuf);

                bytesWritten += blockSize;
                startAddress += blockSize;
                bytesToWrite -= blockSize;
                NotifyWriteProgress(bytesWritten);
            }
        }
コード例 #8
0
 protected abstract void WritePage(MemSource source, int size, byte[] data);
コード例 #9
0
 protected abstract void ReadPage(MemSource source, int size, ref byte[] data);
コード例 #10
0
ファイル: USBasp.cs プロジェクト: gsmrana/AVR-USBasp-Burner
        protected override void WritePage(MemSource source, int size, byte[] data)
        {
            var cmd = (source == MemSource.Flash) ? ASPCMD.USBASP_FUNC_WRITEFLASH : ASPCMD.USBASP_FUNC_WRITEEEPROM;

            WriteUsbEndpointOut(cmd, data, _pageAddress, 0, size); //eeprom only
        }
コード例 #11
0
ファイル: USBasp.cs プロジェクト: gsmrana/AVR-USBasp-Burner
        protected override void ReadPage(MemSource source, int size, ref byte[] data)
        {
            var cmd = (source == MemSource.Flash) ? ASPCMD.USBASP_FUNC_READFLASH : ASPCMD.USBASP_FUNC_READEEPROM;

            ReadUsbEndpointIn(cmd, ref data, _pageAddress, 0, size);
        }