
AVRisp tested on ATMega88A inspired by various implementations around: - AVR_SPI_Programmer_v2 ( BO Qiang ) - mAVRISP (Aaron Berk) - TestAVRISP(Chester Hamilton)
AVRisp implementation for mBED
AVRISP/AVRISP.h
- Committer:
- Ellips
- Date:
- 2015-04-28
- Revision:
- 1:4b883042df7d
- Parent:
- 0:29abe3c0b902
File content as of revision 1:4b883042df7d:
//****************************************************************************/ // Description: // // Program AVR chips with the AVR910 ISP (in-system programming) protocol, // using an mbed. // // This is a wrapper for AVR_ISP_Programmer_v2 // //****************************************************************************/ #ifndef AVRISP_H #define AVRISP_H //****************************************************************************/ // Includes //****************************************************************************/ #include "mbed.h" //****************************************************************************/ // Definations for: ATMEGA1284p //****************************************************************************/ #if defined(ATMEGA1284P) #define SIGNATURE_BYTE_1 0x1E #define SIGNATURE_BYTE_2 0x97 #define SIGNATURE_BYTE_3 0x05 #define PAGE_SIZE 64 #define NUM_PAGE 512 //****************************************************************************/ // Definations for: ATMEGA88A //****************************************************************************/ #elif defined(ATMEGA88A) #define SIGNATURE_BYTE_1 0x1E #define SIGNATURE_BYTE_2 0x93 #define SIGNATURE_BYTE_3 0x0A #define PAGE_SIZE 32 #define NUM_PAGE 128 #endif class AVRISP { public: typedef enum _SignatureByte{ eSB1 = 0x00, eSB2 = 0x01, eSB3 = 0x02 } SignatureByte; typedef enum _FuseType{ eFTLo, eFTHi, eFTEx, eFTLock, } FuseType; typedef void(*PRGCB)(void); AVRISP(PinName mosi, PinName miso, PinName sclk, PinName reset, uint32_t spiClk, uint16_t pageSize, PRGCB pCB = NULL); virtual ~AVRISP(); bool EnableProgrammingMode(); void LeaveProgrammingMode(); void ChipErase(); bool ProgramFlash(FILE *hexFile); bool VerifyFlash(FILE *hexFile); uint8_t ReadChipSignatureByte(SignatureByte Nr); void WriteFuse( FuseType Typ, uint8_t fuse ); uint8_t ReadFuse( FuseType Typ ); void WriteProgramPage(uint16_t addr); void LoadProgramPage(uint16_t addr,uint8_t lowData,uint8_t highData); uint8_t ReadProgramFlash(uint16_t addr, bool highByte); private: uint8_t ReadByte(FILE *file); void StillProgramming(); SPI spiPort; DigitalOut resetPin; uint16_t mPageSize; PRGCB progressCB; }; #endif