我使用的wifi shield是这样的
先用WIZSmartScript调试,可以用,叠加到arduino上后,可以通过串口和arduino进行通信,但是我希望用SPI跟arduino通信,但是当用IDE上面的WiFi -> example -> ScanNetwork这个例子时,总是显示WiFi shield not present,在源代码中进行调试,发现:
这是个获取wifi的状态的函数
uint8_t WiFiClass::status()
{
return WiFiDrv::getConnectionStatus();
}
uint8_t WiFiDrv::getConnectionStatus()
{
WAIT_FOR_SLAVE_SELECT();
// Send Command
SpiDrv::sendCmd(GET_CONN_STATUS_CMD, PARAM_NUMS_0);
//Wait the reply elaboration
SpiDrv::waitForSlaveReady();
// Wait for reply
uint8_t _data = -1;
uint8_t _dataLen = 0;
SpiDrv::waitResponseCmd(GET_CONN_STATUS_CMD, PARAM_NUMS_1, &_data, &_dataLen); SpiDrv::spiSlaveDeselect();
return _data;
}
#define WAIT_FOR_SLAVE_SELECT() \
SpiDrv::waitForSlaveReady(); \
SpiDrv::spiSlaveSelect();
#define waitSlaveReady() (digitalRead(SLAVEREADY) == LOW)
void SpiDrv::waitForSlaveReady()
{
Serial.println("now check waitSlaveReady");
while (!waitSlaveReady());
}
我发现在调用SpiDrv::waitForSlaveReady时,陷入了while循环中,因为digitalRead(SLAVEREADY) == LOW这个不成立,导致while循环出不来,可是我也不知道为什么SLAVEREADY不为LOW呀,之前做的工作就只是初始化。
void SpiDrv::begin()
{
// Set direction register for SCK and MOSI pin.
// MISO pin automatically overrides to INPUT.
// When the SS pin is set as OUTPUT, it can be used as
// a general purpose output port (it doesn't influence
// SPI operations).
pinMode(SCK, OUTPUT);
pinMode(MOSI, OUTPUT);
pinMode(SS, OUTPUT);
pinMode(SLAVESELECT, OUTPUT);
pinMode(SLAVEREADY, INPUT);
pinMode(WIFILED, OUTPUT);
digitalWrite(SCK, LOW);
digitalWrite(MOSI, LOW);
digitalWrite(SS, HIGH);
digitalWrite(SLAVESELECT, HIGH);
digitalWrite(WIFILED, LOW);
#ifdef _DEBUG_
INIT_TRIGGER()
#endif
// Warning: if the SS pin ever becomes a LOW INPUT then SPI
// automatically switches to Slave, so the data direction of
// the SS pin MUST be kept as OUTPUT.
SPCR |= _BV(MSTR);
SPCR |= _BV(SPE);
//SPSR |= _BV(SPI2X);
}
SLAVEREADY被设置为INPUT。
还有一个现象就是当我在wifi shield上面叠加了sensor shieldV5.0时,SLAVEREADY为低,跳出while循环了,但是出现了别的问题,在SpiDrv::waitResponseCmd(GET_CONN_STATUS_CMD, PARAM_NUMS_1, &_data, &_dataLen);中&_data没有赋值,导致还是wifi shield not present。
求大神指点一二呀,我已经被这个问题困扰了一个星期了。。。 |