Skip to content

Commit

Permalink
Can reliably reset ZG2100 chip - fixed bug in g2100.c chip reset.
Browse files Browse the repository at this point in the history
Fixed bug in serialUsbPrintHex.
  • Loading branch information
adamfeuer committed Aug 7, 2010
1 parent 7f3dfa2 commit c532a7b
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 34 deletions.
60 changes: 41 additions & 19 deletions g2100.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,14 @@ void zg_init()

// Maple: start serial console debugging
// blink LED_CONN a few times just for fun
blinkyConn();
//blinkyConn();
// Send a message out serial USB
//serialUsbPrintlnWaitForInput(" ");
serialUsbPrintlnWaitForInput(" ");
//serialUsbPrintlnWaitForInput("***In zg_init()");
serialUsbPrintln("***In zg_init()");

ZG2100_SpiInit();

// clr = SPSR;
// clr = SPDR;

Expand All @@ -89,6 +90,7 @@ void zg_init()
zg_buf_len = UIP_BUFSIZE;

zg_chip_reset();
zg_read_chip_info_block();
zg_interrupt2_reg();
zg_interrupt_reg(0xff, 0);
zg_interrupt_reg(0x80|0x40, 1);
Expand All @@ -107,8 +109,8 @@ void spi_transfer(volatile U8* buf, U16 len, U8 toggle_cs)

serialUsbPrintln("SPI transfer start:");
for (i = 0; i < len; i++) {
serialUsbWriteStr("tx byte: ");
serialUsbPrintHex(buf[i]);
serialUsbWriteStr("tx byte: ");
serialUsbPrintHex(buf[i]);
serialUsbWriteStr(" ");
ZG2100_SpiSendData(buf[i]); // Start the transmission
buf[i] = ZG2100_SpiRecvData();
Expand Down Expand Up @@ -144,27 +146,34 @@ void zg_chip_reset()
spi_transfer(hdr, 3, 1);
} while(loop_cnt++ < 1);

// serialUsbPrintlnWaitForInput("in zg_chip_reset - b");
//serialUsbPrintlnWaitForInput("in zg_chip_reset - b");
serialUsbPrintln("in zg_chip_reset - b");

/*
// write reset register data
hdr[0] = ZG_INDEX_ADDR_REG;
hdr[1] = 0x00;
hdr[2] = ZG_RESET_STATUS_REG;
spi_transfer(hdr, 3, 1);

//serialUsbPrintlnWaitForInput("in zg_chip_reset - c");
serialUsbPrintln("in zg_chip_reset - c");
*/
serialUsbPrintlnWaitForInput("in zg_chip_reset - c");
//serialUsbPrintln("in zg_chip_reset - c");

do {
hdr[0] = 0x40 | ZG_INDEX_DATA_REG;
// write reset register data
hdr[0] = ZG_INDEX_ADDR_REG;
hdr[1] = 0x00;
hdr[2] = ZG_RESET_STATUS_REG;
spi_transfer(hdr, 3, 1);

hdr[0] = ZG_READ_REG_CMD | ZG_INDEX_DATA_REG;
hdr[1] = 0x00;
hdr[2] = 0x00;
spi_transfer(hdr, 3, 1);
} while((hdr[1] & ZG_RESET_MASK) == 0);

//serialUsbPrintlnWaitForInput("in zg_chip_reset - d");
serialUsbPrintln("in zg_chip_reset - d");
serialUsbPrintlnWaitForInput("in zg_chip_reset - d");
//serialUsbPrintln("in zg_chip_reset - d");

do {
hdr[0] = 0x40 | ZG_BYTE_COUNT_REG;
Expand All @@ -173,8 +182,8 @@ void zg_chip_reset()
spi_transfer(hdr, 3, 1);
} while((hdr[1] == 0) && (hdr[2] == 0));

//serialUsbPrintlnWaitForInput("in zg_chip_reset - done");
serialUsbPrintln("in zg_chip_reset - done");
serialUsbPrintlnWaitForInput("in zg_chip_reset - done");
//serialUsbPrintln("in zg_chip_reset - done");

}

Expand Down Expand Up @@ -546,7 +555,7 @@ void zg_drv_process()
zg_drv_state = DRV_STATE_IDLE;
break;
case DRV_STATE_SETUP_SECURITY:
serialUsbPrintln(" DRV_STATE_SETUP_SECURITY");
serialUsbPrintlnWaitForInput(" DRV_STATE_SETUP_SECURITY");
switch (security_type) {
case ZG_SECURITY_TYPE_NONE:
zg_drv_state = DRV_STATE_ENABLE_CONN_MANAGE;
Expand Down Expand Up @@ -583,7 +592,7 @@ void zg_drv_process()
}
break;
case DRV_STATE_INSTALL_PSK:
serialUsbPrintln(" DRV_STATE_INSTALL_PSK");
serialUsbPrintlnWaitForInput(" DRV_STATE_INSTALL_PSK");
// Install the PSK key on G2100
zg_buf[0] = ZG_CMD_WT_FIFO_MGMT;
zg_buf[1] = ZG_MAC_TYPE_MGMT_REQ;
Expand All @@ -597,7 +606,7 @@ void zg_drv_process()
zg_drv_state = DRV_STATE_IDLE;
break;
case DRV_STATE_ENABLE_CONN_MANAGE:
serialUsbPrintln(" DRV_STATE_ENABLE_CONN_MANAGE");
serialUsbPrintlnWaitForInput(" DRV_STATE_ENABLE_CONN_MANAGE");
// enable connection manager
zg_buf[0] = ZG_CMD_WT_FIFO_MGMT;
zg_buf[1] = ZG_MAC_TYPE_MGMT_REQ;
Expand All @@ -621,7 +630,7 @@ void zg_drv_process()
break;
case DRV_STATE_START_CONN:
{
serialUsbPrintln(" DRV_STATE_START_CONN");
serialUsbPrintlnWaitForInput(" DRV_STATE_START_CONN");
zg_connect_req_t* cmd = (zg_connect_req_t*)&zg_buf[3];

// start connection to AP
Expand Down Expand Up @@ -653,7 +662,7 @@ void zg_drv_process()
break;
}
case DRV_STATE_PROCESS_RX:
serialUsbPrintln(" DRV_STATE_PROCESS_RX");
serialUsbPrintlnWaitForInput(" DRV_STATE_PROCESS_RX");
zg_recv(zg_buf, &zg_buf_len);
rx_ready = 1;

Expand All @@ -664,3 +673,16 @@ void zg_drv_process()
break;
}
}

void zg_read_chip_info_block() {
serialUsbPrintln("Reading Chip Info Block:");
serialUsbPrintln("Byte 1:");
hdr[0] = 0x21 | ZG_READ_REG_CMD;
hdr[1] = 0x00;
serialUsbPrintln("Byte 0:");
spi_transfer(hdr, 2, 1);
hdr[0] = 0x21 | ZG_READ_REG_CMD;
hdr[1] = 0x00;
spi_transfer(hdr, 2, 1);
serialUsbPrintlnWaitForInput("Read Chip Info Block - done");
}
1 change: 1 addition & 0 deletions g2100.h
Original file line number Diff line number Diff line change
Expand Up @@ -298,5 +298,6 @@ U8* zg_get_mac();
void zg_set_ssid(U8* ssid, U8 ssid_len);
void zg_set_sec(U8 sec_type, U8* sec_key, U8 sec_key_len);
void zg_drv_process();
void zg_read_chip_info_block();

#endif /* G2100_H_ */
23 changes: 12 additions & 11 deletions maple-spi.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@
#include "maple-spi.h"
#include "maple-util.h"

// ZG2100 SPI HAL

int led0_bit = 0;
int led1_bit = 0;
int led2_bit = 0;
int led3_bit = 0;
int led_conn_bit = 0;

void enable_interrupt(uint8 channel) {

// copied from exti_attach_interrupt() in libmaple/exti.c
Expand Down Expand Up @@ -105,8 +113,8 @@ void SPI1_Init() {
MapleSPIFrequency freq;
uint32 spi_num, endian, prescale;

//serialUsbPrintlnWaitForInput("***In SPI1_Init()");
serialUsbPrintln("***In SPI1_Init()");
serialUsbPrintlnWaitForInput("***In SPI1_Init()");
//serialUsbPrintln("***In SPI1_Init()");

// set up CS pin
ZG2100_CSInit();
Expand All @@ -117,19 +125,12 @@ void SPI1_Init() {
// init SPI
spi_num = 1;
endian = MSBFIRST;
freq = MAPLE_SPI_4_5MHZ;
//freq = MAPLE_SPI_4_5MHZ;
freq = MAPLE_SPI_9MHZ;
prescale = prescaleFactors[freq]; // only valid for SPI1
spi_init(spi_num, prescale, endian, 0);

//serialUsbPrintlnWaitForInput("*** Done with spi_init.");
serialUsbPrintln("*** Done with spi_init.");
}

// ZG2100 SPI HAL

int led0_bit = 0;
int led1_bit = 0;
int led2_bit = 0;
int led3_bit = 0;
int led_conn_bit = 0;

2 changes: 2 additions & 0 deletions maple-spi.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ MapleSPIFrequency {

// ZG2100 SPI HAL

#define ZG_READ_REG_CMD 0x40

void zg2100_isr_enable(uint8 channel);

#define ZG2100_ISR_DISABLE() nvic_disable_interrupts();
Expand Down
7 changes: 3 additions & 4 deletions maple-util.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

#define USB_TIMEOUT 50

const char *hex = "01234567890ABCDEF";
const char *hex = "0123456789ABCDEF";

void serialUsbInit() {
setupUSB();
Expand Down Expand Up @@ -158,9 +158,8 @@ void blinkyConn() {

void serialUsbPrintHex(uint8 byte) {
char upper, lower;
upper = byte &= 0xF0;
upper = upper >> 4;
lower = byte &= 0x0F;
upper = byte >> 4;
lower = (byte &= 0x0F);
serialUsbWrite(hex[upper]);
serialUsbWrite(hex[lower]);
}

0 comments on commit c532a7b

Please sign in to comment.