Merge branch 'debug'

This commit is contained in:
David Voswinkel 2009-06-25 19:31:22 +02:00
commit f9724a3209
14 changed files with 79 additions and 152 deletions

View File

@ -11,6 +11,7 @@
* open a device based on libusb or libusb-win32.
*/
#include <stdio.h>
#include "opendevice.h"

Binary file not shown.

View File

@ -1,10 +1,10 @@
#ifndef __config_h__
#define __config_h__
#ifndef __CONFIH_H__
#define __CONFIH_H__
#define DEBUG 1
#define DEBUG_USB 2
#define DEBUG_USB_RAW 4
#define DEBUG_USB_TRANS 4
#define DEBUG_SRAM 8
#define DEBUG_SRAM_RAW 16
#define DEBUG_SREG 32

View File

@ -1,3 +1,7 @@
#ifndef __CRC_H__
#define __CRC_H__
#include <stdlib.h>
#include <stdint.h>
@ -8,3 +12,5 @@ uint16_t do_crc_update(uint16_t crc,uint8_t * data,uint16_t size);
void crc_check_memory(uint32_t bottom_addr,uint32_t top_addr,uint8_t *buffer);
uint16_t crc_check_memory_range(uint32_t start_addr, uint32_t size,uint8_t *buffer);
void crc_check_bulk_memory(uint32_t bottom_addr,uint32_t top_addr);
#endif

View File

@ -13,7 +13,7 @@ extern int debug_level; /* the higher, the more messages... */
/* Nothing. debug has been "defined away" in debug.h already. */
#else
void debug(int level, char* format, ...) {
#ifdef NDEBUG
#ifdef NO_DEBUG
/* Empty body, so a good compiler will optimise calls
to pmesg away */
#else

View File

@ -1,5 +1,5 @@
#ifndef DEBUG_H
#define DEBUG_H
#ifndef __DEBUG_H__
#define __DEBUG_H__
#include <stdlib.h>
#include <stdint.h>

View File

@ -1,5 +1,5 @@
#ifndef DUMP_H
#define DUMP_H
#ifndef __DUMP_H__
#define __DUMP_H__
#include <stdlib.h>
#include <stdint.h>

View File

@ -1,5 +1,5 @@
#ifndef _FIFO_H_
#define _FIFO_H_
#ifndef __FIFO_H__
#define __FIFO_H__
#include <avr/io.h>
#include <avr/interrupt.h>

View File

@ -44,9 +44,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
if (rq->bRequest == USB_UPLOAD_INIT) {
if (req_state != REQ_STATUS_IDLE){
#if DEBUG_USB
printf("USB_UPLOAD_INIT: ERROR state is not REQ_STATUS_IDLE\n");
#endif
debug(DEBUG_USB,"USB_UPLOAD_INIT: ERROR state is not REQ_STATUS_IDLE\n");
return 0;
}
@ -55,9 +53,8 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
req_bank_size = 1 << rq->wValue.word;
sync_errors = 0;
crc = 0;
#if DEBUG_USB
printf("USB_UPLOAD_INIT: bank_size=0x%x\n", req_bank_size);
#endif
debug(DEBUG_USB,"USB_UPLOAD_INIT: bank_size=0x%x\n", req_bank_size);
/*
* -------------------------------------------------------------------------
*/
@ -69,29 +66,24 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
req_addr = req_addr | rq->wIndex.word;
if (rx_remaining) {
sync_errors++;
#if DEBUG_USB
printf
("USB_UPLOAD_ADDR: Out of sync addr=0x%lx remain=%i packet=%i sync_error=%i\n",
debug
(DEBUG_USB,"USB_UPLOAD_ADDR: Out of sync addr=0x%lx remain=%i packet=%i sync_error=%i\n",
req_addr, rx_remaining, rq->wLength.word, sync_errors);
#endif
ret_len = 0;
}
rx_remaining = rq->wLength.word;
ret_len = USB_MAX_TRANS;
#if DEBUG_USB
if (req_addr && (req_addr % 0x1000) == 0) {
printf("USB_UPLOAD_ADDR: bank=0x%02x addr=0x%08lx\n",
debug(DEBUG_USB,"USB_UPLOAD_ADDR: bank=0x%02x addr=0x%08lx\n",
req_bank, req_addr);
crc_check_bulk_memory(req_addr - 0x1000,req_addr);
}
#endif
if (req_addr && req_addr % req_bank_size == 0) {
#if DEBUG_USB
printf("USB_UPLOAD_ADDR: req_bank=0x%02x addr=0x%08lx\n",
debug(DEBUG_USB,"USB_UPLOAD_ADDR: req_bank=0x%02x addr=0x%08lx\n",
req_bank, req_addr);
#endif
req_bank++;
}
ret_len = USB_MAX_TRANS;
@ -99,22 +91,19 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
* -------------------------------------------------------------------------
*/
} else if (rq->bRequest == USB_DOWNLOAD_INIT) {
#if DEBUG_USB
printf("USB_DOWNLOAD_INIT\n");
#endif
debug(DEBUG_USB,"USB_DOWNLOAD_INIT\n");
/*
* -------------------------------------------------------------------------
*/
} else if (rq->bRequest == USB_DOWNLOAD_ADDR) {
printf("USB_DOWNLOAD_ADDR\n");
debug(DEBUG_USB,"USB_DOWNLOAD_ADDR\n");
/*
* -------------------------------------------------------------------------
*/
} else if (rq->bRequest == USB_BULK_UPLOAD_INIT) {
if (req_state != REQ_STATUS_IDLE){
#if DEBUG_USB
printf("USB_BULK_UPLOAD_INIT: ERROR state is not REQ_STATUS_IDLE\n");
#endif
debug(DEBUG_USB,"USB_BULK_UPLOAD_INIT: ERROR state is not REQ_STATUS_IDLE\n");
return 0;
}
@ -122,27 +111,21 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
rx_remaining = 0;
req_bank_size = (1 << rq->wValue.word) & 0xffff;
sync_errors = 0;
#if DEBUG_USB
printf("USB_BULK_UPLOAD_INIT: bank_size=0x%x\n", req_bank_size);
#endif
debug(DEBUG_USB,"USB_BULK_UPLOAD_INIT: bank_size=0x%x\n", req_bank_size);
/*
* -------------------------------------------------------------------------
*/
} else if (rq->bRequest == USB_BULK_UPLOAD_ADDR) {
if (req_state != REQ_STATUS_IDLE){
#if DEBUG_USB
printf("USB_BULK_UPLOAD_ADDR: ERROR state is not REQ_STATUS_IDLE\n");
#endif
debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: ERROR state is not REQ_STATUS_IDLE\n");
return 0;
}
req_state = REQ_STATUS_BULK_UPLOAD;
req_addr = rq->wValue.word;
req_addr = req_addr << 16;
req_addr = req_addr | rq->wIndex.word;
#if DEBUG_USB
printf("USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr=0x%08lx \n",req_bank,req_addr);
#endif
debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr=0x%08lx \n",req_bank,req_addr);
ret_len = 0;
/*
@ -151,27 +134,21 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
} else if (rq->bRequest == USB_BULK_UPLOAD_NEXT) {
if (req_state != REQ_STATUS_BULK_UPLOAD){
#if DEBUG_USB
printf("USB_BULK_UPLOAD_NEXT: ERROR state is not REQ_STATUS_BULK_UPLOAD\n");
#endif
debug(DEBUG_USB,"USB_BULK_UPLOAD_NEXT: ERROR state is not REQ_STATUS_BULK_UPLOAD\n");
return 0;
}
if (rx_remaining) {
sync_errors++;
#if DEBUG_USB
printf
("USB_BULK_UPLOAD_NEXT: Out of sync addr=0x%lx remain=%i packet=%i sync_error=%i\n",
debug(DEBUG_USB,
"USB_BULK_UPLOAD_NEXT: Out of sync addr=0x%lx remain=%i packet=%i sync_error=%i\n",
req_addr, rx_remaining, rq->wLength.word, sync_errors);
#endif
ret_len = 0;
}
rx_remaining = rq->wLength.word;
ret_len = USB_MAX_TRANS;
if (req_addr && req_addr % req_bank_size == 0) {
#if DEBUG_USB
printf("USB_BULK_UPLOAD_NEXT: req_bank=0x%02x addr= 0x%08lx \n",
debug(DEBUG_USB,"USB_BULK_UPLOAD_NEXT: req_bank=0x%02x addr= 0x%08lx \n",
req_bank, req_addr);
#endif
req_bank++;
}
ret_len = USB_MAX_TRANS;
@ -179,17 +156,11 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
* -------------------------------------------------------------------------
*/
} else if (rq->bRequest == USB_BULK_UPLOAD_END) {
if (req_state != REQ_STATUS_BULK_UPLOAD){
#if DEBUG_USB
printf("USB_BULK_UPLOAD_END: ERROR state is not REQ_STATUS_BULK_UPLOAD\n");
#endif
debug(DEBUG_USB,"USB_BULK_UPLOAD_END: ERROR state is not REQ_STATUS_BULK_UPLOAD\n");
return 0;
}
#if DEBUG_USB
printf("USB_BULK_UPLOAD_END:\n");
#endif
debug(DEBUG_USB,"USB_BULK_UPLOAD_END:\n");
req_state = REQ_STATUS_IDLE;
sram_bulk_write_end();
ret_len = 0;
@ -200,10 +171,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
req_addr = rq->wValue.word;
req_addr = req_addr << 16;
req_addr = req_addr | rq->wIndex.word;
#if DEBUG_USB
printf("USB_CRC: addr=0x%08lx \n", req_addr);
#endif
debug(DEBUG_USB,"USB_CRC: addr=0x%08lx \n", req_addr);
crc_check_bulk_memory(0x000000,req_addr);
ret_len = 0;
/*
@ -211,10 +179,8 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
*/
} else if (rq->bRequest == USB_SNES_BOOT) {
req_state = REQ_STATUS_BOOT;
#if DEBUG_USB
printf("USB_SNES_BOOT: ");
debug(DEBUG_USB,"USB_SNES_BOOT: ");
ret_len = 0;
#endif
/*
* -------------------------------------------------------------------------
*/
@ -224,22 +190,16 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
req_addr = rq->wValue.word;
req_addr = req_addr << 16;
req_addr = req_addr | rq->wIndex.word;
#if DEBUG_USB
printf("USB_CRC_ADDR: addr=0x%lx size=%i\n", req_addr,
debug(DEBUG_USB,"USB_CRC_ADDR: addr=0x%lx size=%i\n", req_addr,
rq->wLength.word);
#endif
req_size = rq->wLength.word;
req_size = req_size << 2;
tx_remaining = 2;
#if DEBUG_USB
printf("USB_CRC_ADDR: addr=0x%lx size=%li\n", req_addr, req_size);
#endif
debug(DEBUG_USB,"USB_CRC_ADDR: addr=0x%lx size=%li\n", req_addr, req_size);
cli();
crc = crc_check_memory_range(req_addr,req_size,read_buffer);
tx_buffer[0] = crc & 0xff;
tx_buffer[1] = (crc >> 8) & 0xff;
sei();
ret_len = 2;
req_state = REQ_STATUS_IDLE;
}

View File

@ -13,8 +13,8 @@
* communicate between the host and the device.
*/
#ifndef __REQUESTS_H_INCLUDED__
#define __REQUESTS_H_INCLUDED__
#ifndef __REQUESTS_H__
#define __REQUESTS_H__
#define USB_UPLOAD_INIT 0
#define USB_UPLOAD_ADDR 1

View File

@ -57,6 +57,7 @@ void system_init(void)
PORTD &= ~((1 << AVR_SNES_SW_PIN)
| (1 << SNES_WR_EN_PIN));
/*-------------------------------------------------*/
@ -66,28 +67,19 @@ void system_init(void)
void sreg_set(uint32_t addr)
{
uint8_t i = 24;
#if DEBUG_SREG
printf("sreg_set: addr=0x%08lx",addr);
#endif
debug(DEBUG_SREG,"sreg_set: addr=0x%08lx",addr);
while(i--) {
if ((addr & ( 1L << i))){
#if DEBUG_SREG
printf("1");
#endif
debug(DEBUG_SREG,"1");
AVR_ADDR_SER_PORT |= ( 1 << AVR_ADDR_SER_PIN);
} else {
AVR_ADDR_SER_PORT &= ~( 1 << AVR_ADDR_SER_PIN);
#if DEBUG_SREG
printf("0");
#endif
debug(DEBUG_SREG,"0");
}
AVR_ADDR_SCK_PORT |= (1 << AVR_ADDR_SCK_PIN);
AVR_ADDR_SCK_PORT &= ~(1 << AVR_ADDR_SCK_PIN);
}
#if DEBUG_SREG
printf("\n");
#endif
debug(DEBUG_SREG,"\n");
AVR_ADDR_LATCH_PORT |= (1 << AVR_ADDR_LATCH_PIN);
AVR_ADDR_LATCH_PORT &= ~(1 << AVR_ADDR_LATCH_PIN);
@ -99,9 +91,7 @@ void sreg_set(uint32_t addr)
void sram_bulk_read_start(uint32_t addr)
{
#if DEBUG_SRAM
printf("sram_bulk_read_start: addr=0x%08lx\n\r", addr);
#endif
debug(DEBUG_SRAM,"sram_bulk_read_start: addr=0x%08lx\n\r", addr);
avr_data_in();
AVR_CS_PORT &= ~(1 << AVR_CS_PIN);
@ -141,9 +131,8 @@ inline uint8_t sram_bulk_read(void)
void sram_bulk_read_end(void)
{
#if DEBUG_SRAM
printf("sram_bulk_read_end:");
#endif
debug(DEBUG_SRAM,"sram_bulk_read_end:");
AVR_RD_PORT |= (1 << AVR_RD_PIN);
AVR_CS_PORT |= (1 << AVR_CS_PIN);
avr_data_in();
@ -152,9 +141,7 @@ void sram_bulk_read_end(void)
uint8_t sram_read(uint32_t addr)
{
uint8_t byte;
#if DEBUG_SRAM_RAW
printf("sram_read: addr=0x%08lx\n\r", addr);
#endif
debug(DEBUG_SRAM_RAW,"sram_read: addr=0x%08lx\n\r", addr);
avr_data_in();
@ -186,9 +173,7 @@ uint8_t sram_read(uint32_t addr)
void sram_bulk_write_start(uint32_t addr)
{
#if DEBUG_SRAM
printf("sram_bulk_write_start: addr=0x%08lx\n\r", addr);
#endif
debug(DEBUG_SRAM,"sram_bulk_write_start: addr=0x%08lx\n\r", addr);
avr_data_out();
@ -215,9 +200,7 @@ inline void sram_bulk_write( uint8_t data)
void sram_bulk_write_end(void)
{
#if DEBUG_SRAM
printf("sram_bulk_write_end:");
#endif
debug(DEBUG_SRAM,"sram_bulk_write_end:");
AVR_WR_PORT |= (1 << AVR_WR_PIN);
AVR_CS_PORT |= (1 << AVR_CS_PIN);
avr_data_in();
@ -226,10 +209,7 @@ void sram_bulk_write_end(void)
void sram_write(uint32_t addr, uint8_t data)
{
#if DEBUG_SRAM_RAW
printf("sram_write: addr=0x%08lx data=%x\n\r", addr, data);
#endif
debug(DEBUG_SRAM_RAW,"sram_write: addr=0x%08lx data=%x\n\r", addr, data);
avr_data_out();
@ -254,9 +234,7 @@ void sram_bulk_copy(uint32_t addr, uint8_t * src, uint32_t len)
uint32_t i;
uint8_t *ptr = src;
#if DEBUG_SRAM
printf("sram_copy: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len);
#endif
debug(DEBUG_SRAM,"sram_copy: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len);
sram_bulk_write_start(addr);
for (i = addr; i < (addr + len); i++){
sram_bulk_write(*ptr++);
@ -270,9 +248,7 @@ void sram_bulk_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len)
uint32_t i;
uint8_t *ptr = dst;
#if DEBUG_SRAM
printf("sram_bulk_read_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len);
#endif
debug(DEBUG_SRAM,"sram_bulk_read_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len);
sram_bulk_read_start(addr);
for (i = addr; i < (addr + len); i++) {
*ptr = sram_bulk_read();
@ -284,15 +260,11 @@ void sram_bulk_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len)
void sram_bulk_set(uint32_t addr, uint32_t len,uint8_t value){
uint32_t i;
#if DEBUG_SRAM
printf("sram_bulk_set: addr=0x%08lx len=%li\n\r", addr,len);
#endif
debug(DEBUG_SRAM,"sram_bulk_set: addr=0x%08lx len=%li\n\r", addr,len);
sram_bulk_write_start(addr);
for (i = addr; i < (addr + len); i++) {
if (0 == i % 0xfff)
#if DEBUG_SRAM
printf("sram_bulk_set: addr=0x%08lx\n\r", i);
#endif
debug(DEBUG_SRAM,"sram_bulk_set: addr=0x%08lx\n\r", i);
sram_bulk_write(value);
sram_bulk_write_next();
}
@ -302,14 +274,10 @@ void sram_bulk_set(uint32_t addr, uint32_t len,uint8_t value){
void sram_setr(uint32_t addr, uint32_t len,uint8_t value)
{
uint32_t i;
#if DEBUG_SRAM
printf("sram_clear: addr=0x%08lx len=%li\n\r", addr,len);
#endif
debug(DEBUG_SRAM,"sram_clear: addr=0x%08lx len=%li\n\r", addr,len);
for (i = addr; i < (addr + len); i++) {
if (0 == i % 0xfff)
#if DEBUG_SRAM
printf("sram_clear: addr=0x%08lx\n\r", i);
#endif
debug(DEBUG_SRAM,"sram_clear: addr=0x%08lx\n\r", i);
sram_write(i, value);
}
}
@ -319,9 +287,7 @@ void sram_copy(uint32_t addr, uint8_t * src, uint32_t len)
uint32_t i;
uint8_t *ptr = src;
#if DEBUG_SRAM
printf("sram_copy: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len);
#endif
debug(DEBUG_SRAM,"sram_copy: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len);
for (i = addr; i < (addr + len); i++)
sram_write(i, *ptr++);
}
@ -331,9 +297,7 @@ void sram_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len)
uint32_t i;
uint8_t *ptr = dst;
#if DEBUG_SRAM
printf("sram_read_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len);
#endif
debug(DEBUG_SRAM,"sram_read_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len);
for (i = addr; i < (addr + len); i++) {
*ptr = sram_read(i);
ptr++;
@ -344,9 +308,7 @@ void sram_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len)
uint8_t sram_check(uint8_t * buffer, uint32_t len)
{
uint16_t cnt;
#if DEBUG_SRAM
printf("sram_check: len=%li\n\r",len);
#endif
debug(DEBUG_SRAM,"sram_check: len=%li\n\r",len);
for (cnt = 0; cnt < len; cnt++)
if (buffer[cnt])
return 1;

View File

@ -1,3 +1,6 @@
#ifndef __SRAM_H__
#define __SRAM_H__
#include <stdlib.h>
#include <stdint.h>
#include <avr/io.h>
@ -142,7 +145,6 @@
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_set(uint32_t addr, uint32_t len, uint8_t value);
@ -162,3 +164,5 @@ void sram_bulk_write(uint8_t data);
void sram_bulk_copy(uint32_t addr, uint8_t * src, uint32_t len);
void sram_bulk_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len);
void sram_bulk_set(uint32_t addr, uint32_t len,uint8_t value);
#endif

View File

@ -1,9 +1,8 @@
#ifndef _UART_H_
#define _UART_H_
#ifndef __UART_H__
#define __UART_H__
#define CR "\r\n"
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdio.h>
@ -14,6 +13,6 @@ void uart_puts(const char *s);
void uart_puts_P(PGM_P s);
static int uart_stream(char c, FILE *stream);
#endif
#endif /* _UART_H_ */

View File

@ -33,26 +33,22 @@ uint8_t usbFunctionWrite(uint8_t * data, uint8_t len)
uint8_t *ptr;
uint8_t i;
if (len > rx_remaining) {
printf("usbFunctionWrite more data than expected remain: %i len: %i\n",
printf("ERROR:usbFunctionWrite more data than expected remain: %i len: %i\n",
rx_remaining, len);
len = rx_remaining;
}
if (req_state == REQ_STATUS_UPLOAD) {
rx_remaining -= len;
#if DEBUG_USB_RAW
printf("usbFunctionWrite REQ_STATUS_UPLOAD addr: 0x%08lx len: %i rx_remaining=%i\n",
debug(DEBUG_USB_TRANS,"usbFunctionWrite REQ_STATUS_UPLOAD addr: 0x%08lx len: %i rx_remaining=%i\n",
req_addr, len, rx_remaining);
#endif
sram_copy(req_addr, data, len);
req_addr += len;
} else if (req_state == REQ_STATUS_BULK_UPLOAD) {
rx_remaining -= len;
#if DEBUG_USB_RAW
printf("usbFunctionWrite REQ_STATUS_BULK_UPLOAD addr: 0x%08lx len: %i rx_remaining=%i\n",
debug(DEBUG_USB_TRANS,"usbFunctionWrite REQ_STATUS_BULK_UPLOAD addr: 0x%08lx len: %i rx_remaining=%i\n",
req_addr, len, rx_remaining);
#endif
ptr = data;
i = len;
while(i--){
@ -69,9 +65,8 @@ uint8_t usbFunctionRead(uint8_t * data, uint8_t len)
if (len > tx_remaining)
len = tx_remaining;
tx_remaining -= len;
#if DEBUG_USB_RAW
printf("usbFunctionRead len=%i tx_remaining=%i \n", len, tx_remaining);
#endif
debug(DEBUG_USB_TRANS,"usbFunctionRead len=%i tx_remaining=%i \n", len, tx_remaining);
for (i = 0; i < len; i++) {
*data = tx_buffer[len];
data++;