isme
isme - 认证专家
冰镇大西瓜

注册于 2年前

回答
296
文章
19
关注者
26

W80X芯片RTC没有独立电源,断电RTC中数据是会丢的,保持供电芯片PMU可以进入低功耗模式,sleep(功耗1~2ma)或standby(功耗<10ua),通过wakeup脚唤醒,sleep模式和standby模式,RTC是保持工作。

这个是涂鸦SDK,海凌科公众号可以获取。

先看sdk demo使用指导,把demo跑通再去改代码。

自动重连建议参考这个demo,通过蓝牙配网成功后也会自动打开自动重连功能。

    u8 auto_reconnect = 0xff;
    tls_wifi_auto_connect_flag(WIFI_AUTO_CNT_FLAG_GET, &auto_reconnect);
    if(auto_reconnect != WIFI_AUTO_CNT_ON)
    {
        auto_reconnect = WIFI_AUTO_CNT_ON;
        tls_wifi_auto_connect_flag(WIFI_AUTO_CNT_FLAG_SET, &auto_reconnect); 
        tls_wifi_connect((u8 *)"w600", strlen("w600"), (u8 *)"12345678", strlen("12345678"));
        printf("--->WIFI_AUTO_CNT_FLAG_SET ON\n");
    }

W500已经停产了,目前主推是W80X系列,可以支持中文UTF-8编码。

可以参考QQ群文件里面的串口OTA,第一包要>64k(img头部信息)
QQ群文件百度云下载链接
image.png

不知道这个demo对你有没有帮助

/***************************************************************************** 
* 
* File Name : main.c
* 
* Description: main 
* 
* Copyright (c) 2014 Winner Micro Electronic Design Co., Ltd. 
* All rights reserved. 
* 
* Author : dave
* 
* Date : 2014-6-14
*****************************************************************************/ 
#include "wm_include.h"
#include "wm_cpu.h"
#include "wm_dma.h"

u8 send_data[8] = {0}; 
u8 recv_data[8] = {0}; 

static void gpio_dma_callback(void)
{
    printf("--->%s\r\n",__func__);
    printf("recv_data:");
    for(int i = 0; i < 8; i++)printf("%02X ",recv_data[i]);
    printf("\n");
}


void UserMain(void)
{
    extern void tls_sys_clk_set();
    extern u32 tls_mem_get_avail_heapsize(void);
    tls_sys_clk_set(CPU_CLK_80M);

    printf("\n             \\\\\\|///\n");
    printf("           \\\\  .-.-  //\n");
    printf(".           (  .@.@  )  \n");
    printf("+-------oOOo-----(_)-----oOOo---------+\n\n");
    printf(" ---> Compile "__DATE__", "__TIME__"\n");
    printf(" ---> %s.c\r\n",__func__);
    printf(" ---> GetHeap:%d\n",tls_mem_get_avail_heapsize());
    printf("\n+---------------------Oooo------------+\n");


    u8 dmaCh;
    struct tls_dma_descriptor DmaDesc;

    printf("send_data:");
    for(int i = 0; i < 8; i++)printf("%02X ",send_data[i]);
    printf("\n");

    printf("recv_data:");
    for(int i = 0; i < 8; i++)printf("%02X ",recv_data[i]);
    printf("\n");

    for(int i = 0; i < (sizeof(send_data)/sizeof(char)); i++)
    {
        send_data[i] = i;
    }
    printf("send_data:");
    for(int i = 0; i < 8; i++)printf("%02X ",send_data[i]);
    printf("\n");

    printf("recv_data:");
    for(int i = 0; i < 8; i++)printf("%02X ",recv_data[i]);
    printf("\n");

    dmaCh = tls_dma_request(1, 0);
    
    printf("send_data:%08X\n",&send_data[0]);

    DmaDesc.src_addr  = send_data;
    DmaDesc.dest_addr = recv_data;

    printf("src_addr: %08X\n",DmaDesc.src_addr);
    printf("dest_addr:%08X\n",DmaDesc.dest_addr);

    DmaDesc.dma_ctrl = TLS_DMA_DESC_CTRL_DEST_ADD_INC |TLS_DMA_DESC_CTRL_SRC_ADD_INC |  TLS_DMA_DESC_CTRL_BURST_SIZE1 | TLS_DMA_DESC_CTRL_DATA_SIZE_BYTE | TLS_DMA_DESC_CTRL_TOTAL_BYTES(8);
    DmaDesc.valid = TLS_DMA_DESC_VALID;
    DmaDesc.next = NULL;
    
    tls_dma_start(dmaCh, &DmaDesc, 0);
    tls_dma_irq_register(dmaCh, (void (*))gpio_dma_callback, NULL, TLS_DMA_IRQ_TRANSFER_DONE);

}

参考这个demo程序。

/***************************************************************************** 
* 
* File Name : main.c
* 
* Description: main 
* 
* Copyright (c) 2014 Winner Micro Electronic Design Co., Ltd. 
* All rights reserved. 
* 
* Author : dave
* 
* Date : 2014-6-14
*****************************************************************************/ 
#include "wm_include.h"
#include "string.h"

void UserMain(void)
{
    printf("\n user task \n");    
    struct tls_curr_bss_t rssi;
    u8 auto_reconnect = 0xff;
    if(auto_reconnect != WIFI_AUTO_CNT_ON)
    {
        auto_reconnect = WIFI_AUTO_CNT_ON;
        tls_wifi_auto_connect_flag(WIFI_AUTO_CNT_FLAG_SET, &auto_reconnect); 
        tls_wifi_connect((u8 *)"w600", strlen("w600"), (u8 *)"12345678", strlen("12345678"));
        printf("--->WIFI_AUTO_CNT_FLAG_SET ON\n");
    }
    
    while(1)
    {
        tls_os_time_delay(HZ*1); 
        tls_wifi_get_current_bss(&rssi);
        printf("--->rssi = -%d\n",rssi.rssi);
    }

#if DEMO_CONSOLE
    CreateDemoTask();
#endif
//用户自己的task
}

image.png

目前W806 SDK暂时没有串口 DAM方式驱动。

W80X系列芯片新出货的都有在工厂产线做ADC校准,W800 SDK和W806 SDK需要更新一个补丁包。

这是依据电压和adc采集的数据转换来的,你也可以认为是一个ax+b的转换,也就是相当于通过数据总结的一个线性公式。

IO唤醒的话只能通过W806的wakeup脚唤醒,或者也可以通过定时器唤醒,可以参考SDK、PMU demo。

发布
问题