找回密码
 立即注册

微信扫码登录

搜索
查看: 56864|回复: 180

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

  [复制链接]

104

主题

2846

回帖

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

积分
12297
金钱
9282
HASS币
460

教程狂人突出贡献

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

这是之前的玩法,这种方式(在用户空间运行rtk_hciattach)据说比较陈旧。现代化的方法是内核直接驱动(serdev),详见:https://bbs.hassbian.com/thread-18366-1-1.html
---------------------
之前帖子的内容随着认识的深入不断变化,导致可读性比较差,重新梳理一下启用串口蓝牙电路的要点:
  • 认识自己的硬件,蓝牙芯片、接口,安卓系统是一个比较可靠的地方,其次是网文;
  • 换用启用了串口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, 下载次数: 210)
原来下载到蓝牙芯片会导致失败的那个config文件是1.5m的,估计这个波特率不行(460800我试过也不行),把波特率改为230400、4m下载都没问题,文件大小25字节(2m那个大小为81字节,也不知道多出来的内容都是啥)。只是4m的必要性、稳定性可能都是个问号。
rtl8761b_config_4m&230400_short.zip (324 Bytes, 下载次数: 132) 不过更推荐81字节的版本,似乎更稳定:
rtl8761b_config.81bytes.zip (614 Bytes, 下载次数: 395)
包内有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 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

0

主题

9

回帖

157

积分

注册会员

积分
157
金钱
148
HASS币
0
发表于 2022-10-28 08:38:40 | 显示全部楼层
本帖最后由 YanceyChiew 于 2022-10-28 08:42 编辑
XCray 发表于 2022-10-27 21:24
没有“自动调整波特率”的说法。

config文件的最重要内容是指定波特率,在rtk_hciattach完成初始化后会 ...

好吧,之前看到说“已经有坛友找到了可以顺畅下载并且波特率会自动调整为2M的config”,原来是指自动从配置文件中应用2M的速率,我还以为是能够根据需求最高可以自动升到2M。
(打了个emoji,结果帖子就断这里了,幸好后退回去还能复制到编辑区的内容)


我试了下,如果删除配置文件,波特率应该是可以直接在命令中指定,不过硬件流控无法通过命令打开,会忽略参数始终disable,所以还是得靠配置文件,而用了配置文件就会忽略手动指定的波特率。。。另外,直接在终端中手动执行命令rtk_hciattach时不指定 -n 参数,就无需让它后台运行了,它会自动从终端detach,这样也避免处理SIGHUP这些问题。


因为只写了个service文件,我直接贴这里:

# /etc/systemd/system/rtk_bluez.service
[Unit]
Description=rtk uart bluetooth device init
StartLimitIntervalSec=10s
DefaultDependencies=no
After=systemd-udevd.service
Conflicts=shutdown.target
Before=shutdown.target

[Service]
ExecStartPre=/usr/bin/env gpioset 0 82=1
ExecStart=/opt/tools/rtk_hciattach -n ttyAML1 rtk_h5
ExecStopPost=/usr/bin/env gpioset 0 82=0

Restart=on-failure
StartLimitBurst=3
RestartSec=2s
TimeoutSec=15s
KillMode=process

[Install]
WantedBy=sysinit.target

虽然写了失败后重启,但是开机自启时一般不会失败,除非是在开机后有蓝牙设备已经连接时手动重启这个服务会有小概率失败。我开始担心直接重启时gpio置低时间不足一秒会有负面影响,试了几次后发现没问题,这样就不用在开机或关机时多sleep一秒了。

评分

参与人数 1金钱 +20 收起 理由
XCray + 20 赠人玫瑰,手留余香!

查看全部评分

回复

使用道具 举报

0

主题

14

回帖

91

积分

注册会员

积分
91
金钱
77
HASS币
0
发表于 2024-3-29 09:45:16 | 显示全部楼层
小白,妥了
回复

使用道具 举报

0

主题

10

回帖

175

积分

注册会员

积分
175
金钱
165
HASS币
0
发表于 2023-5-5 10:00:07 | 显示全部楼层
本帖最后由 hpyer2019 于 2023-5-5 10:02 编辑

纯小白,跟着折腾了一晚上,执行 systemctl status bluetooth之后看起来蓝牙状态是正常的,如图:
微信截图_20230505095013.png

但HA集成里面添加Bluetooth,提示No unconfigured Bluetooth adapters found. There are 0 ignored adapters.
微信截图_20230505095353.png

这个错误好像是没有找到蓝牙适配器,是不是HA的安装方式有问题?是armbiam装casaos里面装的docker版HA
麻烦大佬给个提示,这该如何进行下一步?



回复

使用道具 举报

81

主题

1445

回帖

3万

积分

元老级技术达人

积分
30680
金钱
29114
HASS币
290
发表于 2023-4-28 15:36:41 | 显示全部楼层
839108722benben 发表于 2023-3-28 15:30
是的,插上显示器就有声音,拔下来就没有。我做了个vga假负载,连了3个电阻,现在可以不用插显示器了 ...

这两天升级到
Supervisor 2023.04.1
Home Assistant 2023.4.6
Home Assistant 2023.5.0b1
现在MPD通过hdml就发不出声了,其它也没有做什么修改。
奇怪,不知哪儿出了问题。
回复

使用道具 举报

81

主题

1445

回帖

3万

积分

元老级技术达人

积分
30680
金钱
29114
HASS币
290
发表于 2023-4-28 15:36:36 | 显示全部楼层
839108722benben 发表于 2023-3-28 15:30
是的,插上显示器就有声音,拔下来就没有。我做了个vga假负载,连了3个电阻,现在可以不用插显示器了 ...

这两天升级到
Supervisor 2023.04.1
Home Assistant 2023.4.6
Home Assistant 2023.5.0b1
现在MPD通过hdml就发不出声了,其它也没有做什么修改。
奇怪,不知哪儿出了问题。
回复

使用道具 举报

0

主题

20

回帖

460

积分

中级会员

积分
460
金钱
440
HASS币
0
发表于 2023-3-28 15:30:58 | 显示全部楼层
dscao 发表于 2023-3-28 11:08
按理说不应该吧,才几块钱的东西还要再缩水呀。

是通过 addon MPD播放的吗?

是的,插上显示器就有声音,拔下来就没有。我做了个vga假负载,连了3个电阻,现在可以不用插显示器了
回复

使用道具 举报

81

主题

1445

回帖

3万

积分

元老级技术达人

积分
30680
金钱
29114
HASS币
290
发表于 2023-3-28 11:08:25 | 显示全部楼层
839108722benben 发表于 2023-3-28 09:55
有可能,是不是硬件缩水了。我看外观一样的。

按理说不应该吧,才几块钱的东西还要再缩水呀。

是通过 addon MPD播放的吗?

接上显示器就能正常发声了,拨下就没有了吗?
回复

使用道具 举报

0

主题

20

回帖

460

积分

中级会员

积分
460
金钱
440
HASS币
0
发表于 2023-3-28 09:55:06 | 显示全部楼层
dscao 发表于 2023-3-28 09:35
我当时测试不用接显示器,可以正常发声呀。难道这个小东西硬件不一样?
刚刚又测试了一下,我的完全可以啊 ...

有可能,是不是硬件缩水了。我看外观一样的。
回复

使用道具 举报

81

主题

1445

回帖

3万

积分

元老级技术达人

积分
30680
金钱
29114
HASS币
290
发表于 2023-3-28 09:35:01 | 显示全部楼层
本帖最后由 dscao 于 2023-3-28 10:06 编辑
839108722benben 发表于 2023-3-28 09:15
我买了一个这个,7块5包邮。但是vga必须接显示器音频才有输出,不是很方便,这就不如接个usb声卡了。 ...

我当时测试不用接显示器,可以正常发声呀。难道这个小东西硬件不一样?
刚刚又测试了一下,我的完全可以啊。


回复

使用道具 举报

0

主题

20

回帖

460

积分

中级会员

积分
460
金钱
440
HASS币
0
发表于 2023-3-28 09:15:52 | 显示全部楼层
dscao 发表于 2022-8-19 16:48
用这个就能将hdmi的声音在普通音箱上发声了。

这个小盒子做homeassistant及相关服务看来是非常不错呀。

我买了一个这个,7块5包邮。但是vga必须接显示器音频才有输出,不是很方便,这就不如接个usb声卡了。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-9-21 05:01 , Processed in 1.364074 second(s), 19 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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