聯盛德 HLK-W806 (五): W801開發板上手報告


目錄

W801

今天收到了等了兩周的W801開發板, 和W806開發板外觀基本一致, 但是尺寸, 排針和元件布局都有調整.

W801和W806開發板的實物對比

W801與W806的對比

兩個芯片核心完全一樣, 芯片布局基本一致, 看差異就能大致了解W801的配置

W801的規格書

  • 概述增加了無線部分: "支持 2.4G IEEE802.11b/g/n Wi-Fi 通訊協議;支持 BT/BLE 雙模工作模式,支持 BT/BLE4.2 協議"
  • W801內置 2MB Flash, 是W806的兩倍, 其它MCU特性一致

增加的WIFI和藍牙的描述

  • Wi-Fi 特性
    • 支持 GB15629.11-2006,IEEE802.11 b/g/n
    • 支持 Wi-Fi WMM/WMM-PS/WPA/WPA2/WPS
    • 支持 EDCA 信道接入方式
    • 支持 20/40M 帶寬工作模式
    • 支持 STBC、GreenField、Short-GI、支持反向傳輸
    • 支持 AMPDU、AMSDU
    • 支持 IEEE802.11n MCS 0~7、MCS32 物理層傳輸速率檔位,傳輸速率最高到 150Mbps
    • 2/5.5/11Mbps 速率發送時支持 Short Preamble
    • 支持 HT-immediate Compressed Block Ack、Normal Ack、No Ack 應答方式
    • 支持 CTS to self
    • 支持 Station、Soft-AP、Soft-AP/Station 功能
  • 藍牙特性
    • 集成藍牙基帶處理器/協議處理器,支持 BT/BLE 雙模工作模式,支持 BT/BLE4.2 協議
  • 低功耗模式
    • 支持 Wi-Fi 節能模式功耗管理

PIN腳

W801的規格書增加了PIN腳頻率和驅動能力欄, 各個PIN的最高頻率是有區別的, 從10MHz到80MHz不等, 從后面的功能描述看, 與W806是一致的, 因此猜測此頻率描述也適用於W806

W806和W801並非pin-pin兼容, 從PIN#5到#9這5個PIN對應的功能是不同的, 具體區別如下

  • W801有PB23沒有WAKEUP, W806有WAKEUP沒有PB23, W801從#5到#9順位挪了一位
  • W801在#14為ANT, 對應的W806在#14為空
  • W801在#23的PA5, 增加了VRP_EXT復用
  • W801在#24的PA6, 增加了VRP_EXT復用

W801開發板的差異

板載LED

  • W806
    板載三顆LED,分別對應PB0, PB1, PB2, 都是對應PWM復用的PIN腳,
  • W801
    板載七顆LED, 分別對應PB5, PB25, PB26, PB18, PB17, PB16, PB11, 但是里面對應PWM復用的只有PB25和PB16, 所以沒法像W806那樣演示流水燈了

接口

W801除了將MicroUSB換成了Type-C, 還增加了Reset, 5V以及多組3.3V和GND的排線引出, 這個比較不錯, 在W806上沒有5V引出, 如果有5V外設的話比較不方便

天線

W801增加了板載天線, 因此比W806長出了一截

其它細節

  • W801開發板的寬度和W806是一致的, 但是排針間距比W806稍微增大了一點, 這樣兩個排針正好能對上2.54mm間距的面包孔, W806的排針是沒法對齊標准2.54mm孔距的,估計是被吐槽了做的改動.
  • 新增加的兩個3pin排針位置比較讓人費解. 這估計是匆忙設計出來的結果, 沒有照顧到廣大面包板用戶的感受, 兩排排針的設計, 就是為了正好橫跨插在面包板上, 兩邊可以利用面包板的插孔引出接線, 而你在排針上疊一個3pin, 就沒法插在面包板上用了.
  • 新增加的6個pin, 其實應該參考Arduino NANO和Blue Pill的設計, 做到頂上去, 像boot, reset這樣大部分時間基本用不着的pin, 就別做在主排針上浪費位置了.
  • 這一版W801開發板的PB24印了兩處, 有一處是錯的, 位置在AMS1117這側的主排針, 從Type-C口這頭數起第3個pin, 這個應該是PB4, 板子印錯了

W801的SDK

W801的SDK是在W800 SDK的基礎上修改制作的, 和W806 SDK的結構相似, 但是代碼差異巨大. 已經放到了Gitee wm-sdk-w80x, 有興趣的可以下載嘗試. 編譯方式與W806相同, 先通過make menuconfig配置環境和工具鏈, 然后通過make編譯.

另一方面, 因為W801和W806除了無線部分其它結構基本相同, 因此W806 SDK編譯產生的固件是可以直接運行在W801上的, 這點已經驗證過了.

W801的燒錄下載

W801開發板在下載上和W806有一些區別. W801因為內置了串口的RTS控制, 對應觀察到的一些現象:

  • W801開發板連上USB后, 會正常開始運行片內燒錄的程序
  • 使用Putty, XShell, Cutecom, Minicom這些串口程序連接W801開發板時, 會立即暫停運行, 使用聯盛德Upgrade Tools, XCOM等軟件則不會, 經檢查, 區別在於RTS是否被拉低, 正常運行時RTS必須處於高電平狀態.
  • 串口拉低RTS時, W801開發板其實就被重置了, 如果不拉高則一直處於停止狀態, 如果拉高則會復位重啟
  • 在Cutecom, Minicom這些串口程序斷開連接后, RTS恢復高電平, W801開發板會復位重新運行

使用W806的SDK下載燒錄W801時, 需要將rules.mk中的-rs參數修改一下, 從at改為rts, 就能對W801開發板寫入了

run:all
	@$(WM_TOOL) -c $(DL_PORT) -rs rts -ds $(DL_BAUD) -dl $(FIRMWAREDIR)/$(TARGET)/$(TARGET).fls -sl str -ws 115200

monitor:
	@$(WM_TOOL) -c $(DL_PORT) -sl str -ws 115200

list:
	@$(WM_TOOL) -l

down:
	@$(WM_TOOL) -c $(DL_PORT) -rs rts -ds $(DL_BAUD) -dl $(FIRMWAREDIR)/$(TARGET)/$(TARGET).fls

image:all
	@$(WM_TOOL) -c $(DL_PORT) -rs at -ds $(DL_BAUD) -dl $(FIRMWAREDIR)/$(TARGET)/$(TARGET).img

flash:all
	@$(WM_TOOL) -c $(DL_PORT) -rs rts -ds $(DL_BAUD) -dl $(FIRMWAREDIR)/$(TARGET)/$(TARGET).fls

erase:
	@$(WM_TOOL) -c $(DL_PORT) -rs at -eo all

燒錄命令make flash

...
make[1]: Leaving directory '/home/milton/wm-sdk-w806/platform/drivers'
LINK     W806.elf
OBJCOPY  W806.bin
generate normal image completed.
generate normal image completed.
compress binary completed.
generate compressed image completed.
build finished!
connecting serial...
serial connected.
wait serial sync...
serial sync sucess.
mac 58-6D-CD-C1-CC-AA.
start download.
0% [####] 100%
download completed.

如果要單獨控制W801進入下載模式, 需要用以下的步驟

  1. 連接串口(連接時RTS電平會被拉低)
  2. 拉高RTS電平, 這時候W801會復位
  3. 立即以10ms的間隔, 連續輸入二進制字符0x1B, 即Esc對應的編碼
  4. 此時W801就會進入下載模式, 回顯如下的字符, 之后一直輸出字符C
Secboot V0.6\r\n
CCCCCCCCCCCCCCCC

將W801轉為下載模式的Python代碼

import serial
import time

port = serial.Serial(
    "/dev/ttyUSB0",
    baudrate=115200,
    rtscts=True,
    timeout=0)

if port.isOpen():
    print('opened')
else:
    print('open failed')

packet = bytearray()
packet.append(0x1B)
port.rts = False # This will pull the voltage high

while True:
    for i in range(0, 100):
        port.write(packet)
        time.sleep(0.01)
    data = port.read_all()
    print(data)
    if len(data) == 0 or data == b'enter main\r\n':
        print('.')
        continue
    else:
        break

print('pass')

while True:
    data = port.read_all()
    print(data)
    time.sleep(1)

Linux下的問題和解決

W801開發板在RTS的處理上是有問題的.

在Windows下, 串口程序可以在不改變RTS電平的情況下連接和斷開串口, 因此可以做到不中斷開發板的運行, 隨時接入查看日志, 但是在Linux下, 串口程序在獲取串口的fd時, 驅動會主動下拉RTS, 即使串口程序立刻將RTS恢復回高電平, 也會留下一個至少0.3毫秒的脈沖, 導致開發板復位重啟. 如果不恢復高電平, 開發板就處於暫停運行的狀態. 這樣帶來的問題就是在Linux下無法中途接入查看日志, 接入即重啟.

關於Linux下串口RTS的問題可以查看 How to open serial port in linux without changing any pin?

軟件上, 可以通過修改和替換驅動取消連接時的RTS低電平脈沖, 這個一般不推薦使用, 因為可能會影響到其它的串口設備. 從物理上解決會比較簡單, 就是加一個電容來抵消這個脈沖, 實際測試, 在Reset和GND之間接入一個10uF的電容, 就可以抵消8ms以內的低電平影響. 加入電容后, 只要串口程序在獲得fd后立即拉高RTS電平, 就不會中斷或者重啟開發板.
如果要同時在Win10和Linux上使用, 10uF可能會導致Win10識別串口硬件失敗(設備出感嘆號), 需要調低到5uF, 此時在Linux下能消除的低電平脈沖寬度大約在3ms.

以上是測試的連接方式, 實際使用中推薦使用4.7uF的0603的貼片電容直接連接, 注意焊接時不要短路到到相鄰的PA4和PB6. 如果擔心平時使用時不慎短接, 可以在上面覆蓋熱熔膠做絕緣.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM