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.

发布
问题