Avaota A1 无线验证(WIFI + BT)

/ 0评 / 0

Avaota-A1 是韦东山搞得一个板子,总所周知,他们做得板子基本资料缺乏,乱七八糟得,不过基础外设肯定是通得,不然肯定会被骂死,所以常用得就不说了,基本能用.

首先准备二进制的固件文件,这个可以从官方的安卓镜像提取.

root@avaota-a1:/lib/firmware# tree
.
├── aic8800
│   ├── aic_userconfig.txt
│   ├── fmacfw_8800m_custmsg.bin
│   ├── fmacfw.bin
│   ├── fmacfw_rf.bin
│   ├── fw_adid.bin
│   ├── fw_adid_u03.bin
│   ├── fw_patch.bin
│   ├── fw_patch_table.bin
│   ├── fw_patch_table_u03.bin
│   ├── fw_patch_test.bin
│   └── fw_patch_u03.bin
├── aic8800d80
│   ├── aic_userconfig_8800d80.txt
│   ├── aic_userconfig_8800d80-Typ.txt
│   ├── fmacfw_8800d80.bin
│   ├── fmacfw_8800d80_u02.bin
│   ├── fmacfw_rf_8800d80.bin
│   ├── fmacfw_rf_8800d80_u02.bin
│   ├── fw_adid_8800d80.bin
│   ├── fw_adid_8800d80_u02.bin
│   ├── fw_patch_8800d80.bin
│   ├── fw_patch_8800d80_u02.bin
│   ├── fw_patch_table_8800d80.bin
│   ├── fw_patch_table_8800d80_u02.bin
│   ├── lmacfw_rf_8800d80.bin
│   └── lmacfw_rf_8800d80_u02.bin
├── aic8800dc
│   ├── aic_userconfig_8800dc.txt
│   ├── aic_userconfig_8800dw.txt
│   ├── fmacfw_calib_8800dc_h_u02.bin
│   ├── fmacfw_calib_8800dc_u02.bin
│   ├── fmacfw_patch_8800dc_h_u02.bin
│   ├── fmacfw_patch_8800dc_ipc_u02.bin
│   ├── fmacfw_patch_8800dc_u02.bin
│   ├── fmacfw_patch_tbl_8800dc_h_u02.bin
│   ├── fmacfw_patch_tbl_8800dc_ipc_u02.bin
│   ├── fmacfw_patch_tbl_8800dc_u02.bin
│   ├── fw_adid_8800dc_u02.bin
│   ├── fw_adid_8800dc_u02h.bin
│   ├── fw_patch_8800dc_u02.bin
│   ├── fw_patch_8800dc_u02h.bin
│   ├── fw_patch_table_8800dc_u02.bin
│   ├── fw_patch_table_8800dc_u02h.bin
│   └── lmacfw_rf_8800dc.bin
├── aic_userconfig.txt
├── fmacfw.bin
├── fmacfw_rf.bin
├── fmacfw_rf_usb.bin
├── fmacfw_usb.bin
├── fw_adid.bin
├── fw_adid_u03.bin
├── fw_patch.bin
├── fw_patch_table.bin
├── fw_patch_table_u03.bin
├── fw_patch_u03.bin

WiFi部分可以直接用hostapd建立软AP,也可以直接连接AP,这部分比较容易.

蓝牙就有点坑了,第一步就是他们提供的设备树也有问题的,我这里有已经改好的内核

https://github.com/nickfox-taterli/avaota-a1-linux

主要修改

&rfkill {
	compatible = "allwinner,sunxi-rfkill";
	chip_en;
	power_en;
	pinctrl-0;
	pinctrl-names;
	status = "okay";

	/* wlan session */
	wlan {
		compatible    = "allwinner,sunxi-wlan";
		clocks;
		clock-names;
		wlan_power    = "axp2202-aldo3", "axp2202-bldo1"; /* vcc-pl/vcc-pg/vcc-pm */
		wlan_power_vol= <3300000>, <1800000>;
		wlan_busnum   = <0x1>;
		wlan_regon    = <&pio PG 13 GPIO_ACTIVE_HIGH>;
		wlan_hostwake = <&pio PG 14 GPIO_ACTIVE_HIGH>;
		wakeup-source;
	};

	/* bt session */
	bt {
		compatible    = "allwinner,sunxi-bt";
		clocks;
		clock-names;
		bt_power      = "axp2202-aldo3", "axp2202-bldo1"; /* vcc-pl/vcc-pg/vcc-pm */
		bt_power_vol  = <3300000>, <1800000>;
		bt_rst_n      = <&pio PG 12 GPIO_ACTIVE_LOW>;
	};
};

然后默认不会WAKE模块,所以模块也不会响应任何数据,查看代码bsp/drivers/net/wireless/aic8800/aic8800_btlpm/aic8800_btlpm.c

	if (!has_lpm_enabled) {
		BT_DBG("lpm disabled, direct set ext_wake to %c\n", b);
		gpio_set_value(bsi->ext_wake, b != '0' ? bsi->ext_wake_assert : !bsi->ext_wake_assert);
		return count;
	}

所以需要写文件/proc/bluetooth/sleep/btwrite为1启动BT模块.

echo 1 > /proc/bluetooth/sleep/btwrite
btattach -B /dev/ttyAS1 -P h4 -S 1500000
hciconfig -a

只有wake了,才能看到HCI是OK的.

root@avaota-a1:/lib/firmware# hciconfig -a
hci0:   Type: Primary  Bus: UART
        BD Address: F4:20:15:67:CA:FE  ACL MTU: 1021:9  SCO MTU: 255:4
        UP RUNNING 
        RX bytes:832 acl:0 sco:0 events:59 errors:0
        TX bytes:3014 acl:0 sco:0 commands:59 errors:0
        Features: 0xbf 0x2e 0x4d 0xfe 0xd8 0x3f 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV3 
        Link policy: RSWITCH SNIFF 
        Link mode: PERIPHERAL ACCEPT 
        Name: 'avaota-a1'
        Class: 0x400000
        Service Classes: Telephony
        Device Class: Miscellaneous, 
        HCI Version: 5.4 (0xd)  Revision: 0xb
        LMP Version: 5.4 (0xd)  Subversion: 0xb
        Manufacturer: not assigned (2875)

每次写有点麻烦,可以写一个服务/etc/systemd/system/aic-btattach.service

[Unit]
Description=AIC8800 Bluetooth UART attach
After=systemd-modules-load.service
Requires=dev-ttyAS1.device
After=dev-ttyAS1.device
Before=bluetooth.service

[Service]
Type=simple
ExecStartPre=/bin/sh -c "[ -e /proc/bluetooth/sleep/btwrite ] && echo 1 > /proc/bluetooth/sleep/btwrite || true"
ExecStart=/usr/bin/btattach -B /dev/ttyAS1 -P h4 -S 1500000
Restart=on-failure
RestartSec=1

[Install]
WantedBy=multi-user.target

其他就是常规的蓝牙测试了,这里就不多说了,毕竟如果AI也能轻松解决的问题,我多写也没意义.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注