极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9075|回复: 0

arduino没法识别wifi shield

[复制链接]
发表于 2014-3-31 14:35:36 | 显示全部楼层 |阅读模式
我使用的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。

求大神指点一二呀,我已经被这个问题困扰了一个星期了。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-19 12:47 , Processed in 0.040833 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表