tcscy 发表于 2015-7-25 10:45:31

关于小笨蛋四轴程序问题

我自己仿照小笨蛋wifi四轴做了一个四轴,wifi模块用的是88w8686。程序输出的结果为:
\ | /
- RT -   Thread Operating System
/ | \   1.1.0 build Jul 25 2015
2006 - 2012 Copyright by rt-thread team
FW download Phase1 failed

调试过程中一直卡在
循环中    do {
                for(i=0;i<1000;i++);
              gspi_read_reg(SCRATCH_1_REG, &len);
    } while (!len);


以下是完整函数
int sbi_download_wlan_fw_image( const u8 * firmware,int firmwarelen)
{
    int ret,i;
    u16 len;
    u32 cnt = 0;
       
    do {
                for(i=0;i<1000;i++);
              gspi_read_reg(SCRATCH_1_REG, &len);
    } while (!len);
   

    for (;;) {
      if (wait_for_hostintstatus(RT_NULL)) {
            WlanDebug(WlanErr,"FW download Phase2 failed\n");
            return WLAN_STATUS_FAILURE;
      }

      gspi_read_reg(SCRATCH_1_REG, &len);

      if (!len) {
            break;
      }

      if (len & 1) {
            WlanDebug(WlanMsg,"CRC Error\n");
            len &= ~1;
      } else {
            WlanDebug(WlanMsg,".");
      }

      gspi_write_data_direct((u8 *) (firmware + cnt), CMD_RDWRPORT_REG,
                               (len / 2) + 1);
      gspi_write_reg(HOST_INT_STATUS_REG, 0x0000);
      gspi_write_reg(CARD_INT_CAUSE_REG, CIC_CmdDnLdOvr);
      cnt += len;
    }
    ret = WLAN_STATUS_SUCCESS;
    return ret;
}



wifi源码如下

tcscy 发表于 2015-7-25 10:54:07

没人来吗

lans0625 发表于 2015-7-25 10:59:51

是不是一直读不到数据,所以就卡在那了?

tcscy 发表于 2015-7-25 11:11:54

读到的值,为0

int gspi_read_reg(u16 reg, u16 * val)
{
    u32 reg_val = 0;
        WifiSpiReadReg(reg, &reg_val);
        *val = (u16)reg_val;
    return 0;
}
void WifiSpiReadReg(u16 reg, u32* pval)
{

        u16 temp_l = 0;
        u32 temp_h = 0;
        SPI_ClrCS(WIFI_SPI);
        SPI_WriteByte(WIFI_SPI, reg);
       
//        if_gspi_ops->Delay_nUS(1);       
        temp_l = SPI_ReadByte(WIFI_SPI, WIFI_DUMMY_DATA);        //读低位
        temp_h = SPI_ReadByte(WIFI_SPI, WIFI_DUMMY_DATA);        //读高位
        temp_h <<= 16;
        temp_h |= temp_l;
        SPI_SetCS(WIFI_SPI);
       
        *pval = temp_h;
        //rt_kprintf("\nSpiReadReg:0X%8X\n\n",temp_h);

}

tcscy 发表于 2015-7-25 11:12:53

lans0625 发表于 2015-7-25 10:59
是不是一直读不到数据,所以就卡在那了?

读到的值,为0

int gspi_read_reg(u16 reg, u16 * val)
{
    u32 reg_val = 0;
      WifiSpiReadReg(reg, &reg_val);
      *val = (u16)reg_val;
    return 0;
}
void WifiSpiReadReg(u16 reg, u32* pval)
{

      u16 temp_l = 0;
      u32 temp_h = 0;
      SPI_ClrCS(WIFI_SPI);
      SPI_WriteByte(WIFI_SPI, reg);
      
//      if_gspi_ops->Delay_nUS(1);      
      temp_l = SPI_ReadByte(WIFI_SPI, WIFI_DUMMY_DATA);      //读低位
      temp_h = SPI_ReadByte(WIFI_SPI, WIFI_DUMMY_DATA);      //读高位
      temp_h <<= 16;
      temp_h |= temp_l;
      SPI_SetCS(WIFI_SPI);
      
      *pval = temp_h;
      //rt_kprintf("\nSpiReadReg:0X%8X\n\n",temp_h);

}
读到的temp_h为0

tcscy 发表于 2015-7-25 11:21:17

我看到错误了,真是悲剧。for循环后面有一个分号,。。。。

tcscy 发表于 2015-7-25 15:34:24

已经崩溃了,被这个wifi模块 坑死了
页: [1]
查看完整版本: 关于小笨蛋四轴程序问题