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。

發布
問題