MBED AVR ISP programmer. Targeted for ATMEGA1284p but should work for other AVR chips as well. Inspired by AVR_SPI_Programmer_v2 and AVR910.

Dependencies:   mbed

Committer:
qiangbo
Date:
Thu Jan 05 02:44:12 2012 +0000
Revision:
0:064004c069be
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
qiangbo 0:064004c069be 1 //****************************************************************************/
qiangbo 0:064004c069be 2 // Description:
qiangbo 0:064004c069be 3 //
qiangbo 0:064004c069be 4 // Program AVR chips with the AVR910 ISP (in-system programming) protocol,
qiangbo 0:064004c069be 5 // using an mbed.
qiangbo 0:064004c069be 6 //
qiangbo 0:064004c069be 7 // This is a wrapper for AVR_ISP_Programmer_v2
qiangbo 0:064004c069be 8 //
qiangbo 0:064004c069be 9 //****************************************************************************/
qiangbo 0:064004c069be 10
qiangbo 0:064004c069be 11 #ifndef AVRISP_H
qiangbo 0:064004c069be 12 #define AVRISP_H
qiangbo 0:064004c069be 13
qiangbo 0:064004c069be 14 //****************************************************************************/
qiangbo 0:064004c069be 15 // Includes
qiangbo 0:064004c069be 16 //****************************************************************************/
qiangbo 0:064004c069be 17 #include "mbed.h"
qiangbo 0:064004c069be 18
qiangbo 0:064004c069be 19 //****************************************************************************/
qiangbo 0:064004c069be 20 // Definations for: ATMEGA1284p
qiangbo 0:064004c069be 21 //****************************************************************************/
qiangbo 0:064004c069be 22 #define SIGNATURE_BYTE_1 0x1E
qiangbo 0:064004c069be 23 #define SIGNATURE_BYTE_2 0x97
qiangbo 0:064004c069be 24 #define SIGNATURE_BYTE_3 0x05
qiangbo 0:064004c069be 25 #define PAGE_SIZE 128
qiangbo 0:064004c069be 26 #define NUM_PAGE 512
qiangbo 0:064004c069be 27
qiangbo 0:064004c069be 28 //****************************************************************************/
qiangbo 0:064004c069be 29 // Definations for programming
qiangbo 0:064004c069be 30 //****************************************************************************/
qiangbo 0:064004c069be 31 #define LSB(I) ((I) & 0xFF)
qiangbo 0:064004c069be 32 #define MSB(I) (((I) & 0xF00) >> 8)
qiangbo 0:064004c069be 33 #define TARGET_CLK 1000000L
qiangbo 0:064004c069be 34 #define MAX_PAGE_SIZE (PAGE_SIZE >> 1) //divide max page size by 2 to get number of words per page
qiangbo 0:064004c069be 35
qiangbo 0:064004c069be 36 class AVRISP
qiangbo 0:064004c069be 37 {
qiangbo 0:064004c069be 38 public:
qiangbo 0:064004c069be 39 AVRISP(PinName mosi, PinName miso, PinName sclk, PinName reset);
qiangbo 0:064004c069be 40 bool EnableProgrammingMode();
qiangbo 0:064004c069be 41 void LeaveProgrammingMode();
qiangbo 0:064004c069be 42 int ReadChipSignatureByte1();
qiangbo 0:064004c069be 43 int ReadChipSignatureByte2();
qiangbo 0:064004c069be 44 int ReadChipSignatureByte3();
qiangbo 0:064004c069be 45 void StillProgramming();
qiangbo 0:064004c069be 46 void ChipErase();
qiangbo 0:064004c069be 47 void WriteFuseLow(uint8_t fuseLow);
qiangbo 0:064004c069be 48 int ReadFuseLow();
qiangbo 0:064004c069be 49 void WriteFuseHigh(uint8_t fuseHigh);
qiangbo 0:064004c069be 50 int ReadFuseHigh();
qiangbo 0:064004c069be 51 void WriteFuseExtended(uint8_t fuseExtended);
qiangbo 0:064004c069be 52 int ReadFuseExtended();
qiangbo 0:064004c069be 53 void WriteLockByte(uint8_t lockByte);
qiangbo 0:064004c069be 54 int ReadLockByte();
qiangbo 0:064004c069be 55 void WriteProgramPage(uint16_t addr);
qiangbo 0:064004c069be 56 void LoadProgramPage(uint16_t addr,uint8_t lowData,uint8_t highData);
qiangbo 0:064004c069be 57 uint8_t ReadByte(FILE *file);
qiangbo 0:064004c069be 58 void ReadProgramFlash(uint8_t addrMSB, uint8_t addrLSB);
qiangbo 0:064004c069be 59 bool ProgramFlash(char *hexFileName);
qiangbo 0:064004c069be 60
qiangbo 0:064004c069be 61 private:
qiangbo 0:064004c069be 62 SPI* spiPort;
qiangbo 0:064004c069be 63 DigitalOut *resetPin;
qiangbo 0:064004c069be 64 };
qiangbo 0:064004c069be 65
qiangbo 0:064004c069be 66 #endif