diff --git a/avr/usbload/crc.c b/avr/usbload/crc.c index c7e0100..9d58925 100644 --- a/avr/usbload/crc.c +++ b/avr/usbload/crc.c @@ -16,7 +16,6 @@ uint16_t crc_xmodem_update(uint16_t crc, uint8_t data) else crc <<= 1; } - return crc; } @@ -26,7 +25,6 @@ uint16_t do_crc(uint8_t * data, uint16_t size) uint16_t i; for (i = 0; i < size; i++) { crc = crc_xmodem_update(crc, data[i]); - // printf("%x : %x\n",crc,data[i]); } return crc; } diff --git a/avr/usbload/main.c b/avr/usbload/main.c index 5c6b631..9209135 100644 --- a/avr/usbload/main.c +++ b/avr/usbload/main.c @@ -135,7 +135,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) printf("USB_CRC_ADDR: Addr: 0x%lx Size: %li\n", req_addr, req_size); #endif cli(); - // crc_check_memory_range(req_addr,req_size); + crc_check_memory_range(req_addr,req_size); sei(); ret_len = 2; } diff --git a/avr/usbload/sram.c b/avr/usbload/sram.c index 1f32d3c..d2367a9 100644 --- a/avr/usbload/sram.c +++ b/avr/usbload/sram.c @@ -97,16 +97,64 @@ void sreg_set(uint32_t addr) } +void sram_bulk_read_start(uint32_t addr) +{ +#ifdef DEBUG_SRAM + printf("sram_bulk_read_start: addr=0x%08lx\n\r", addr); +#endif + avr_data_in(); + + AVR_WR_PORT |= (1 << AVR_WR_PIN); + AVR_RD_PORT |= (1 << AVR_RD_PIN); + AVR_CS_PORT &= ~(1 << AVR_CS_PIN); + sreg_set(addr); + + AVR_RD_PORT &= ~(1 << AVR_RD_PIN); + +} + +void sram_bulk_read_end(void) +{ +#ifdef DEBUG_SRAM + printf("sram_bulk_read_end:"); +#endif + AVR_CS_PORT |= (1 << AVR_CS_PIN); + avr_data_in(); +} + +inline uint8_t sram_bulk_read(void) +{ + uint8_t byte; + AVR_RD_PORT |= (1 << AVR_RD_PIN); + counter_up(); + AVR_RD_PORT &= ~(1 << AVR_RD_PIN); + + asm volatile ("nop"); + asm volatile ("nop"); + asm volatile ("nop"); + asm volatile ("nop"); + asm volatile ("nop"); + asm volatile ("nop"); + asm volatile ("nop"); + asm volatile ("nop"); + + byte = AVR_DATA_PIN; + AVR_RD_PORT |= (1 << AVR_RD_PIN); + return byte; +} uint8_t sram_read(uint32_t addr) { uint8_t byte; +#ifdef DEBUG_SRAM + printf("sram_read: addr=0x%08lx\n\r", addr); +#endif avr_data_in(); + AVR_CS_PORT &= ~(1 << AVR_CS_PIN); AVR_WR_PORT |= (1 << AVR_WR_PIN); AVR_RD_PORT |= (1 << AVR_RD_PIN); - AVR_CS_PORT &= ~(1 << AVR_CS_PIN); sreg_set(addr); @@ -133,6 +181,11 @@ uint8_t sram_read(uint32_t addr) void sram_write(uint32_t addr, uint8_t data) { + +#ifdef DEBUG_SRAM + printf("sram_write: addr=0x%08lx data=%x\n\r", addr, data); +#endif + avr_data_out(); AVR_CS_PORT &= ~(1 << AVR_CS_PIN); diff --git a/avr/usbload/sram.h b/avr/usbload/sram.h index 5252425..0277409 100644 --- a/avr/usbload/sram.h +++ b/avr/usbload/sram.h @@ -141,9 +141,15 @@ void system_init(void); void sreg_set(uint32_t addr); + uint8_t sram_read(uint32_t addr); void sram_write(uint32_t addr, uint8_t data); void sram_clear(uint32_t addr, uint32_t len); void sram_copy(uint32_t addr,uint8_t *src, uint32_t len); + +void sram_bulk_read_start(uint32_t addr); +void sram_bulk_read_end(void); +uint8_t sram_bulk_read(void); + void sram_read_buffer(uint32_t addr,uint8_t *dst, uint32_t len); uint8_t sram_check(uint8_t *buffer, uint32_t len);