请选择 进入手机版 | 继续访问电脑版

『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 4430|回复: 122

[已解决] M401A/311-1a盒子Armbian系统中蓝牙基本完美,reboot/音乐问题搞定

  [复制链接]

85

主题

2475

帖子

9165

积分

超级版主

Rank: 8Rank: 8

积分
9165
金钱
6625
HASS币
440

教程狂人突出贡献

发表于 2022-8-7 19:05:20 | 显示全部楼层 |阅读模式
本帖最后由 XCray 于 2022-9-19 18:52 编辑

之前帖子的内容随着认识的深入不断变化,导致可读性比较差,重新梳理一下启用串口蓝牙电路的要点:
  • 认识自己的硬件,蓝牙芯片、接口,安卓系统是一个比较可靠的地方,其次是网文;
  • 换用启用了串口uart_A的dtb,网上找或自己编译;原来的dtb默认都是禁用了这个串口。换dtb后ls /dev/tty*确认串口已出现在系统里。比如ttyAML1;
  • 蓝牙芯片型号对应的固件,比如rtl8761btv的固件有两个文件:rtl8761b_fw和rtl_8761b_config,都保存至/lib/firmware/rtlbt目录下。固件有很多版本,自己试出最好用的来。其中config对应不同速率,比较坑,需谨慎选择,有的会不能用、有的不太稳定;用于ha获取传感器数据的,推荐115200或230400速率的,有音乐播放需求的,推荐2m速率的。
  • 每次系统启动,都需要用hciattach完成初始化(包括固件下载至蓝牙芯片),rtl串口蓝牙只能用自家的rtk_hciattach完成(我编译好的已多处上传,有源码自己编译也行),其它品牌的串口蓝牙使用bluez自带的hciattach基本都没问题。
    命令:
    rtk_hciattatch -n -s 115200 ttyAML1 rtk_h5 &
  • gpiod软件包,用apt安装即可。其中的gpioset用来重置蓝牙电路,否则不断电重启后必须重置才能继续使用。标题里两种盒子gpio编号都是0 82,置0关闭1秒后置1打开,完成重置。
    关闭和打开的命令分别为:
    gpioset -s 1 -m time 0 82=0
    gpioset 0 82=1
  • 把gpioset命令和rtk_hciattach命令添加到/etc/rc.local,自动执行。更好的方式应该是通过rf_kill自动完成,但好像涉及到驱动和内核的编译,我能力不够不会弄。

大部分使用串口蓝牙芯片的盒子尤其是realtek芯片的,都可以参考。
我用的rtk_hciattach源码来自radxa,比较坑的是这个repo包含的固件config文件是1.5m速率的,我的两个盒子都用不了。

更详细的内容慢慢看吧:
--------------------
我相信论坛里一定有真正懂的大神,只是好像都比较小气,轻易不爱发表指导意见。

我已经让这两个盒子可以使用蓝牙了,但是有两个问题实在不好搞,不过最终也都搞定了:

1. 系统不断电reboot后蓝牙无法操作,根据文档,应该在reboot过程中“拉低 BT_RST pin,1s 后,BT controller 才能真正进入 power down 模式”,这样系统重启后才可以继续操控蓝牙。

可是我不知道怎么去“拉低”这个引脚(根据安卓dts判断好像是gpiochip0的83号)。 gpiod装了,试过gpioset,不行(原来没用过这个)。

经过苦苦思索和搜索,搜索和思索,外加尝试,终于搞定了。具体方法见65楼。这样直接reboot重启蓝牙也可以继续工作了。

2. 蓝牙初始化后无法变更波特率(所以现在必须删掉固件的config才能完成初始化),怀疑是串口没弄对,可是翻遍安卓dts也没找到更有帮助的信息。

这个是imzlh搞定的!61楼imzlh朋友上传了一个可以正常下载并切换到2m波特率的config文件,用这个config播放音乐就毫无问题了。感谢imzlh
值得强调的是这里有一个隐患:如果同时使用HA的蓝牙集成收集传感器信息的话,2m波特率可能会导致蓝牙吊死,表现就是所有蓝牙传感器都停止状态更新。

怀疑和时钟精度不够有关系。如果没有音乐播放需求的话,还是用原来的方法:删掉config文件、使用115200的波特率,长时间观察没有这个问题。

删掉config文件的方法比较粗暴,并且损失了硬件流控,我把2m波特率的config文件改了改,波特率分别为115200和230400,其它不变(硬件流控保持开启,还有啥我也不知道),下载到蓝牙芯片毫无问题,有兴趣的可以选择测试。
rtl8761b_config_rtscts.zip (422 Bytes, 下载次数: 38)
原来下载到蓝牙芯片会导致失败的那个config文件是1.5m的,估计这个波特率不行(460800我试过也不行),把波特率改为230400、4m下载都没问题,文件大小25字节(2m那个大小为81字节,也不知道多出来的内容都是啥)。只是4m的必要性、稳定性可能都是个问号。
rtl8761b_config_4m&230400_short.zip (324 Bytes, 下载次数: 28) 不过更推荐81字节的版本,似乎更稳定:
rtl8761b_config.81bytes.zip (614 Bytes, 下载次数: 45)
包内有3个版本,115200、230400、2m,按需选用,别忘了改名
~~~~~~~~~~~~~
先是在CoreELEC里已经验证没问题。
然后搞定dtb文件,在系统里把连接蓝牙电路的串口搞出来。
自己编译了rtk_hciattach工具,可以和蓝牙芯片通信,碰到了最后的固件下载失败的问题
怀疑是串口参数没弄对,一番折腾无果。后来终于找到一个真正能参考解决这个问题的帖子:Realtek Bluetooth ERROR: patch timerout, retry · Issue #31 · lwfinger/rtl8723bs_bt (github.com)

解决的办法也很颠覆三观:删掉固件里的那个config文件!(后来明白了点,不删改改也行)

然后就行了!(至少ha里可以正常使用了,无法用于播放音乐,因为波特率不能切换,115200不够)

坑太多了~~~

RTL8761BTV芯片,其它芯片的自行琢磨吧
最后来点儿真相:
blue.png
~~~~~~~~~~~~~~
311-1a yst (yss) 是另一位坛友的,实现的方法完全相同:
【M401A】CoreELEC初步小试,毫无难度的安装和xue微折腾的蓝牙



评分

参与人数 1金钱 +5 收起 理由
kkkkllll08 + 5 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

85

主题

2475

帖子

9165

积分

超级版主

Rank: 8Rank: 8

积分
9165
金钱
6625
HASS币
440

教程狂人突出贡献

 楼主| 发表于 2022-8-7 20:08:18 | 显示全部楼层
本帖最后由 XCray 于 2022-9-2 07:18 编辑

这是我编译的dtb(只在u200基础上增加了连接蓝牙电路的串口)和rtk_hciattach工具(源码来自radxa)。欢迎同款蓝牙芯片的坛友们测试
最后又照着x96-max-plus的dts改了一下串口,其实和之前的效果好像没啥区别。
meson-g12a-u201.dtbdts.zip (18.86 KB, 下载次数: 63)
最关键的还是config(已经有坛友找到了可以顺畅下载并且波特率会自动调整为2M的config,蓝牙音乐就没有问题了)

只测试了5.15和5.18内核,欢迎测试其它版本

还有一个坑:每次重启必须断电,直接reboot不行

ps。我重新整理了完整的安装步骤,还是回到之前的帖子吧:
https://bbs.hassbian.com/thread-17335-1-1.html

发现原来u200的dtb只配置了1G的内存,以前只是在其基础上增加了串口,没管内存的事儿(只是依靠overload uboot去检测)。

再上传一个2G内存的版本,需要的自取:
meson-g12a-u212.zip (14.97 KB, 下载次数: 50)

meson-g12a-u201.zip

9.72 KB, 下载次数: 42

rtk_hciattach.zip

44.01 KB, 下载次数: 40

回复

使用道具 举报

22

主题

1688

帖子

5701

积分

论坛元老

Rank: 8Rank: 8

积分
5701
金钱
4003
HASS币
80
发表于 2022-8-7 21:06:10 | 显示全部楼层
X大玩的越来越深奥 跟不上了
回复

使用道具 举报

85

主题

2475

帖子

9165

积分

超级版主

Rank: 8Rank: 8

积分
9165
金钱
6625
HASS币
440

教程狂人突出贡献

 楼主| 发表于 2022-8-7 21:10:20 | 显示全部楼层
ghostist 发表于 2022-8-7 21:06
X大玩的越来越深奥 跟不上了

别夸我,惭愧着呢
回复

使用道具 举报

39

主题

267

帖子

2132

积分

金牌会员

Rank: 6Rank: 6

积分
2132
金钱
1865
HASS币
0
发表于 2022-8-7 23:15:57 | 显示全部楼层
期待X大
回复

使用道具 举报

3

主题

117

帖子

535

积分

高级会员

Rank: 4

积分
535
金钱
418
HASS币
0
发表于 2022-8-8 00:27:48 | 显示全部楼层
好厉害,可惜同型号盒子都不一定通用。。。
回复

使用道具 举报

28

主题

213

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
金钱
968
HASS币
0
发表于 2022-8-8 08:53:46 | 显示全部楼层
XCray 发表于 2022-8-7 20:08
这是我编译的dtb(只在u200基础上增加了连接蓝牙电路的串口)和rtk_hciattach工具(源码来自radxa)。欢迎 ...

不错,现在还跑着HASSIO,等哪天闲了也弄弄
回复

使用道具 举报

0

主题

184

帖子

562

积分

高级会员

Rank: 4

积分
562
金钱
378
HASS币
0
发表于 2022-8-8 08:57:56 | 显示全部楼层
给力啊,顶帖
回复

使用道具 举报

0

主题

285

帖子

780

积分

高级会员

Rank: 4

积分
780
金钱
495
HASS币
0
发表于 2022-8-8 09:42:25 | 显示全部楼层
本帖最后由 隔壁的王叔叔 于 2022-8-8 09:44 编辑

报错信息一模一样,删掉配置文件删了也没什么用,5.9
sudo rm /lib/firmware/rtl_bt/rtlbt_config

内核。你重新安装驱动了嘛?这个重启必须断电,蛮讨厌的。盒子放在家里,就没办法了
回复

使用道具 举报

85

主题

2475

帖子

9165

积分

超级版主

Rank: 8Rank: 8

积分
9165
金钱
6625
HASS币
440

教程狂人突出贡献

 楼主| 发表于 2022-8-8 10:07:54 来自手机 | 显示全部楼层
本帖最后由 XCray 于 2022-8-8 10:41 编辑
隔壁的王叔叔 发表于 2022-8-8 09:42
报错信息一模一样,删掉配置文件删了也没什么用,5.9
内核。你重新安装驱动了嘛?这个重启必须断电,蛮讨厌 ...
不是rtl_bt,是rtlbt那个目录,不带下划线的。带下划线的是给sdio接口用的。
不用管驱动,系统自带的就行。并且任意版本自带的驱动都可以。

事实上曾经想换,但编译报错且没能力解决。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2022-9-30 18:42 , Processed in 0.079888 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表