在嵌入式Linux上使用CF接口的蓝牙模块

CF-955AX无线网卡LINUX驱动安装问题及解决 comfast cf-955AX 无线网卡 Ubuntu20驱动安装较早版本 v2版。 阅读详情
 随着各种支持蓝牙通信技术的设备的出现, 蓝牙通信变得越来越普及和广泛. 因此在嵌入式设备上集成蓝牙模块的需求变得越来越普遍. 本文以Anycom公司的CF接口的 LSE139蓝牙模块为例, 介绍了如何配置使其在具有CF插槽的嵌入式arm-linux上工作.

1. 配置环境
操作系统: arm-linux
内核: 2.4.19

2. 内核/驱动支持
为了使内核支持蓝牙, 需要给内核打补丁: 我使用的是 http://www.holtmann.org/linux/kernel/patch-2.4.19-mh18.gz  这里需要根据你的内核版本下载不同的补丁. 设备驱动方面, 这个就要看你的运气了, 因为不同版本的内核对蓝牙设备的支持是不一样的. 低版本的内核支持的蓝牙设备要少一些. 我使用的这款蓝牙模块直到内核2.6.6-rc2才得以支持. 所以我不得不更改驱动KERNEL_SOURCE_DIR/drivers/bluetooth/bluecard_cs.c, 使得LSE139在2.4的内核上也可以正常工作. 如果你需要这个Patch, 可以给我发消息或者写信. 我的Email地址是lijinlei1@hotmail.com.

然后对内核作出以下配置:

#
# Bluetooth support
#
CONFIG_BLUEZ
= m
CONFIG_BLUEZ_L2CAP
= y
CONFIG_BLUEZ_SCO
= y
CONFIG_BLUEZ_RFCOMM
= m
CONFIG_BLUEZ_RFCOMM_TTY
= y
CONFIG_BLUEZ_BNEP
= m
CONFIG_BLUEZ_BNEP_MC_FILTER
= y
CONFIG_BLUEZ_BNEP_PROTO_FILTER
= y

#
# Bluetooth device drivers
#
CONFIG_BLUEZ_HCIUSB
= n
CONFIG_BLUEZ_HCIUART
= n
CONFIG_BLUEZ_HCIUART_H4
= n
CONFIG_BLUEZ_HCIDTL1
= n
CONFIG_BLUEZ_HCIBT3C
= n
CONFIG_BLUEZ_HCIBLUECARD
= m
CONFIG_BLUEZ_HCIBTUART
= n
CONFIG_BLUEZ_HCIVHCI
= n
CONFIG_BLUEZ_HCIUSB_SCO
= n
CONFIG_BLUEZ_HCIUART_BCSP
= n
CONFIG_BLUEZ_HCIBFUSB
= n

注意CONFIG_BLUEZ_HCIBLUECARD是对"CF"接口的蓝牙设备的支持.
重新编译内核和模块, 然后安装到设备上并重新启动设备. 如果你不知道怎样编译内核和模块, 请参阅其他文献.

2. pcmcia_cs的修改
由于CF卡通过PCMCIA总线工作, 所以对pcmcia设备的配置也必须修改, 以保证cardmgr能够正确识别新设备并装载正确的Driver. 以下必须手工修改: /etc/pcmcia/config:

--- config . orig  2007 - 09 - 28   16 : 18 : 54.000000000   + 0200
+++  config       2007 - 09 - 28   16 : 17 : 40.000000000   + 0200
@@ -
23 , 6   + 23 , 9  @@
 
device   " serial_cs "
   class 
" serial "  module  " serial_cs "
 
+ device   " bluecard_cs "
+   class  " bluetooth "  module  " bluecard_cs "
+
 
#  dummy drivers
 
 
device   " dummy_cs "  module  " dummy_cs "
@@ -
52 , 3   + 55 , 8  @@
 card 
" Serial or Modem "
   function serial_port
   bind 
" serial_cs "
+
+ card  " Anycom LSE139 Bluetooth Compact Flash Card "
+   version  " BTCFCARD " ,   " LSE139 "
+   bind  " bluecard_cs "
+

注意其中增加(前面带+的)的部分. 做了这部分的修改后, 必须重新启动cardmgr. 然后插入蓝牙模块, 这时cardmgr应该可以正确的识别蓝牙模块并装载bluecard_cs.o. 如果一切正常应该没有任何警告和错误消息出现. 如果出现类似"收到不能识别的数据包" 之类的错误, 八成是驱动有问题了.

3.  安装 bluez
需要交叉编译并安装到设备上的包有:
bluez-libs_2.21
bluez-utils_2.21
如果你安装高版本的bluez, 那么你可能还需要DBUS, 在这里不带DBUS功能的bluez于我的嵌入式设备已经够用, 所以我选择了一个低版本的Bluez. 当我编译bluez的时候编译器抱怨PATH_MAX未定义, 这个时候在出错的C文件头部加上#include <linux/limits.h>

4. 启动蓝牙设备
root@ereader:~ #/ etc / init . d / bluetooth  start
如果你没有这个脚本, 从其他Linux计算机上拷贝一个稍微修改一下就可以用了.
运行这个脚本后, 确保hcid 和 krfcommd这两个后台进程已经跑起来了.

然后可以运行hciconfig hci0, 可以看到蓝牙模块已经成功被初始化, 而且会显示正确的BD地址.

5. 扫描周围的蓝牙模块
root@ereader:~ # hcitool scan
Scanning 
...
        
00 : 12 : 37 : 95 : 57 :C9        Alex Henzen
        
00 :0C: 76 : 47 : 33 :2F       edbuntu- 0
        
00 : 17 :B0 :4C :B0 : 71        Nokia  6021
        
00 : 16 : 41 :F6:E0:E0        NB003
        
00 : 16 : 41 :D7 : 84 :D7        NB024
        
00 : 16 : 41 :D9 :1A:1C       jinlei-Windows
现在可以说你的蓝牙设备已经可以正常工作了. 但如果我们想利用蓝牙通信帮助我们做一点事情, 还有很多其他工作要做. 下面我们举两个应用场景.

应用场景1: 通过蓝牙手机拨号上网
首先你需要一个可以上网的手机, 支持数据业务, 支持蓝牙通信, 并正确的配置好. 然后在设备上使用modprobe rfcomm插入rfcomm.o模块.

第一步, 扫描手机提供的蓝牙服务类型
root@ereader:~ #  sdptool browse 00 : 12 :D2:CE :6C :A1
Browsing 
00 : 12 :D2:CE :6C :A1   ...

Service Name: Headset Audio Gateway
Service RecHandle: 
0x10005
Service Class ID List:
  
" Headset Audio Gateway "   ( 0x1112 )
  
" Generic Audio "   ( 0x1203 )
Protocol Descriptor List:
  
" L2CAP "   ( 0x0100 )
  
" RFCOMM "   ( 0x0003 )
    Channel: 
29
Language Base Attr List:
  code_ISO639: 
0x454e
  encoding:    
0x6a
  base_offset: 
0x100
Profile Descriptor List:
  
" Headset "   ( 0x1108 )
    Version: 
0x0100

Service Name: Dial-Up Networking
Service RecHandle: 
0x10042
Service Class ID List:
  
" Dialup Networking "   ( 0x1103 )
Protocol Descriptor List:
  
" L2CAP "   ( 0x0100 )
  
" RFCOMM "   ( 0x0003 )
    Channel: 
2
Language Base Attr List:
  code_ISO639: 
0x454e
  encoding:    
0x6a
  base_offset: 
0x100
Profile Descriptor List:
  
" Dialup Networking "   ( 0x1103 )
    Version: 
0x0100

可以看到这个手机提供了两种蓝牙服务类型, 便携式耳麦和拨号服务. 我们只对后者感兴趣. 注意该手机在Channel 2上提供拨号连接.

第二步, 与手机配对(Pair)
root@ereader:~ # rfcomm connect  0   00 : 12 :D2:CE :6C :A1   2
请参考rfcomm的帮助了解各个参数的意义. 倒数第二个参数是手机的BD地址, 最后一个参数是连接到哪个channel.  为了确保这一步可以成功, 修改/etc/bluetooth/hcid.conf, 了解pin_helper的用法, 为自己的蓝牙设备设置一个PIN码. 以后这个PIN码就成为配对时的鉴权工具. 当手机收到配对请求时, 输入相同的PIN码即可.

第三步, 安装拨号工具
交叉编译pppd并安装到设备上. 在这之前你可能还要做很多其他的工作比如重新编译内核使其具备对PPP协议的支持等. 可以参考我的另外一篇文章" 在嵌入式Linux上使用CF接口的Modem (CDMA/GPRS) "

第四步, 编写拨号脚本 (假设这个手机是使用中国联通运营商的CDMA手机)
建立文件/etc/ppp/chat-unicom (这里以中国联通的UIM卡为例),使之具有下面的内容:
#   / etc / ppp / chat-unicom
#  this is the chat script  for  unicom

ABORT 
" NO CARRIER "
ABORT 
" NO DIALTONE "
ABORT 
" ERROR "
ABORT 
" NO ANSWER "
ABORT 
" BUSY "
TIMEOUT 
120
""  at
OK atdt
# 777
CONNECT
ABORT "***" 意思是如果结果回显中碰到这样的字符串则中断拨号程序,#777是通过中国联通通信网络上网的拨号号码.

第五步, 开始拨号
modprobe ppp_async
ln -s
/ dev / rfcomm0 / dev / modem / usr / sbin / pppd connect ' / usr / sbin / chat -v -f  / etc / ppp / chat-unicom' user card password card  / dev / modem  115200  nodetach crtscts  debug  usepeerdns defaultroute
nodetach的意思是pppd在前台运行,不脱离控制台,这样可以看到pppd的输出. 默认行为是后台运行。

好了,大功告成,现在可以享受网上冲浪之旅了。

应用场景2: 与PC连接组成无线局域网, 并可以通过PC上网
首先你的电脑需支持蓝牙通信, 并安装了bluez-utils. 然后在设备上使用modprobe bnep插入bnep.o模块. 这里我假设你的电脑运行的是Linux. Windows上的配置应该更为简单, 略.

第一步, 修改/etc/network/interfaces使得当设备与PC连接起来后自动配置Interface:
iface bnep0 inet dhcp
这里我们使用DHCP. 因为我想让PC充当DHCP服务器给我的设备分配IP地址.所以我们在PC上也要做一些配置.

第二步, PC配置.
修改 /etc/bluetooth/hcid.conf, 如下(只列出改动的部分):
lm accept ,  master ;
PAND_ENABLED
= 1
PAND_OPTIONS
= " --listen --role=NAP --devup /etc/bluetooth/pan/dev-up "
改动完成后重启bluetooth服务, 确保pand后台服务已经跑起来了.

建立脚本
/etc/bluetooth/pan/dev-up, 如下:
# ! / bin / sh
echo   1   >   / proc / sys / net / ipv4 / ip_forward
ifup bnep0
这里的第二行是指我们共享该计算机的Internet连接(IP转发), 第三行是指当bluetooth连接建立起来后自动唤起interface.

然后是配置DHCP服务器(修改 /etc/dhcp3/dhcpd.conf), 使得它能够给连接到bnep0上的设备分配IP地址, 并告知DNS服务器的IP地址等, 请参考http://www.yolinux.com/TUTORIALS/DHCP-Server.html获得关于如何配置DHCP服务的信息.

重启DHCP服务.

第三步, 连接到PC
pand -c  00 : 16 : 41 :D9 :1A:1C -r PANU -d NAP -z -n
这里第二个参数是PC上蓝牙模块的BD地址, 其他参数请参考pand的帮助信息. 如果连接成功建立, 使用ifconfig应该可以看到一个新的interface已经建立(bnep0), 然后其IP地址也自动获得. 应该可以PING通PC了, 而且可以上网了.

Good Luck!

NFC快速配对技术解析:从原理到嵌入式硬件实现 近场通信(NFC)作为一种短距离无线通信技术,其核心原理基于13.56MHz频率的电磁感应,实现了设备间厘米级的安全数据交换。这项技术的工程价值在于将复杂的网络配对过程抽象为直观的物理触碰动作,通过交换蓝牙MAC地址、Wi-Fi凭证等元数据,为后续高速连接建立安全通道。在物联网和智能硬件领域,NFC配对显著降低了设备联网门槛,尤其适用于蓝牙耳机、智能家居传感器等低功耗嵌入式设备。本文以恩智浦NTAG I2C连接标签方案为例,深入剖析如何通过硬件选型、天线匹配和NDEF数据操作,在STM32平台上实现“一触即 阅读详情

相关推荐

飞思卡尔STMP系列SoC:ARM9时代的便携多媒体设备核心架构与设计解析

片上系统(SoC)是现代嵌入式设备的核心,它通过将处理器、内存、外设和专用硬件加速单元集成到单一芯片,实现了高性能、低功耗与小型化的统一。其设计原理在于通过硬件模块化分工,让CPU专注于通用计算与系统调度,而将音视频编解码、图像处理等计算密集型任务交由专用硬件单元处理,从而在整体上优化能效比与实时性。这种架构为消费电子带来了显著的技术价值,使得复杂功能得以在有限的功耗和成本预算内实现,推动了MP4播放器、车载导航仪、早期智能手表等便携多媒体设备的普及。具体到应用场景,一颗高度集成的SoC需要提供丰富的存储接

cuifan5176的博客 409

Linux CF卡驱动经验小结

(2.6.34内核, 使用cf卡的IDE模式,PIO传输方式) 设备选择协议 ============ 设备选择协议请参考: http://wenku.baidu.com/view/40f58020aaea998fcc220e2e.html 在写设备寄存器之前需要确定BSY和DRQ这两位为0:         /* yll   * 根据设备选择协议,在往device寄存器中写入以前

yuanlulu的博客 6238

i.MX31多媒体处理器:ARM11架构下的异构计算与功耗管理实践

片上系统(SoC)是现代嵌入式设备的核心,它通过集成通用处理器与专用硬件加速单元,在单一芯片上实现复杂功能。其基本原理是在统一的架构下,通过总线或片上网络连接不同IP模块,实现计算任务的合理分配。这种异构计算架构的技术价值在于,它能将通用计算与特定领域的密集型任务(如视频编解码、图形渲染)解耦,由专用硬件高效处理,从而在提升整体性能的同时显著降低系统功耗。在移动多媒体、物联网终端等对能效比要求极高的应用场景中,SoC的功耗管理技术尤为关键。动态电压频率缩放、电源门控等智能电源管理策略,是实现设备长续航的基础

459

【嵌入式模块】蓝牙模块使用总结

文章目录前言常用的蓝牙模块有哪些?这几种型号的蓝牙有什么区别? 前言   作为最为常用的无线通信模块,蓝牙可以说是一些小型项目(比如智能小车)无线通信模块的首选了,之前研究了好几个蓝牙,碰了很多壁,写一篇博客记录一下! 常用的蓝牙模块有哪些?   很多人一提到蓝牙就会想到一个长方形的扁平的带有几个引脚的片状板子,如下图所示。以为都是一样的蓝牙。。。但其实它们是分型号的。从我目前接触过的蓝牙主要有HC-05、HC-06、BT-04、AT-09等型号的蓝牙,今天讨论的也是这几款蓝牙。 这几种型号的蓝牙有什么区

记录学习成长之路,进一寸有进一寸的欢喜 3万+

linux蓝牙使用方法

本文介绍了Linux系统下蓝牙设备的使用方法,主要包括经典蓝牙和低功耗蓝牙(BLE)两种模式的操作流程。在经典蓝牙模式下,详细说明了作为主设备连接蓝牙耳机的完整步骤:包括驱动加载、设备启动、协议配置、扫描配对、音频播放/录音等操作命令。同时也介绍了作为从设备连接手机/电脑的配置方法。在BLE模式下简要提及了主设备连接的基本操作。文章提供了实用的命令行操作示例,如hciconfig、bluetoothctl、bluealsa等工具的使用,涵盖了蓝牙音频传输的两种主要协议(A2DP和SCO)的应用场景及切换方法

云淡风轻 92

linux系统下的关于蓝牙模块的源代码

linux系统下的关于蓝牙模块的源代码

嵌入式linux蓝牙通讯,开发板蓝牙通信问题,有这方面经验的请进

该楼层疑似违规已被系统折叠隐藏此楼查看此楼我的板子是fl2440,系统版本2.6.12主机是红帽5,各项服务都有开。[root@bogon ~]# hciconfighci0: Type: USBBD Address: 00:15:83:0F:84:DD ACL MTU: 310:10 SCO MTU: 64:8UP RUNNING PSCANRX bytes:1293 acl:0 sco:...

weixin_30673759的博客 584

嵌入式Linux下USB蓝牙设备驱动

详细分析了嵌入式下usb的蓝牙驱动程序,分析比较全面,有一定的启发作用。

【全志T113-S3_100ask】12-1 Linux蓝牙通信实战(BLE简介)

BLE(Bluetooh Low Energy)蓝牙BLE技术是一种短距离、低成本、可互操作性的无线技术,它利用许多的智能手段最大限度地降低其功耗。BLE技术的工作模式非常适用于微型无线传感器(每半秒交换一次数据)或使用完全异步通信的遥控器等其它外设传送数据。这些设备发送的数据量非常小(通常也就几个字节),而且发送的次数也很少(例如每秒几次到每分钟一次,甚至更少)。...

第四维度的博客 5016

嵌入式操作系统蓝牙驱动的实现

有完整的代码,详细的操作流程,在s3c2410开发板实现与pc机蓝牙通信

在linux平台上移植BlueZ

Bluez作为当前最成熟的开源蓝牙协议栈,在Linux的各大发行版中已经得到了广泛的应用。在桌面环境下,使用Bluez应该已经没有太大的问题,本文的主要目的是介绍在嵌入式平台上,搭建和配置Bluez的各个Profile运行所需做的工作,讨论可能遇到的问题,介绍一些工具的使用和工作原理。因为本人的能力和测试时间有限,可能下文中有些理解、分析不一定准确,欢迎联系指正。

嵌入式远程视频采集系统的设计与实现

多媒体通信技术的发展为信息的获取和传输提供了丰富的手段,视频采集 是其中不可缺少的重要组成部分,该系统基于S3C2410的ARM9芯片和嵌入式Linux操作系统,采用USB摄像头捕捉视频,经MPEG-4算法压缩 编码,系统直接与网络相连,用户使用标准的网络浏览器和流媒体播放程序即可查看远程视频影像。 1、硬件系统 系统硬件平台选用北京博创公司的UP-NETARM2410开发板,该系统基于AR

SEU_EXtreme! 2255

蓝牙模块linux驱动程序

这是linux下蓝牙的驱动程序,感兴趣的可以看一看,非常有用的。

Jetson TK1搭建WiFi热点:嵌入式Linux网络栈实战指南

WiFi热点是嵌入式Linux设备实现无线接入与边缘组网的基础能力,其本质涉及无线驱动加载、内核固件管理、用户态AP协议栈(hostapd)、轻量级DHCP/DNS服务(dnsmasq)及iptables网络地址转换等核心机制。在资源受限的ARM平台如Jetson TK1上,该过程尤为典型——需直面驱动兼容性、固件版本错配、NetworkManager服务冲突等真实工程问题。掌握这一流程,不仅可快速构建稳定AP,更能深入理解nl80211接口、udev设备绑定、systemd/upstart服务协同等底层原

weixin_34138056的博客 363

01、【solidworks】windosws正在配置solidworks问题及注册表未卸载干净问题解决

windosws正在配置solidworks问题及注册表未卸载干净问题解决

qq_740388770的博客 2万+

cocos2dx lua + protobuf

vs 2015 cocos2dx 3.10  lua  protobuf1. 下载 protobuf 源码     https://github.com/bnnswyp/protobuf/tree/master/protobuf-2.5.0    解压后的文件列表如下所示         其中 vsprojects 文件夹为 protobuf 的vs 工程2. 打开 protobuf.sln 编译...

u014486706的博客 2163

MPC5121e嵌入式主板:工业级低功耗与高可靠性的硬件设计解析

在嵌入式系统开发领域,硬件选型是决定项目成败的基石,尤其对于工业自动化、车载电子等严苛环境应用。其核心在于理解处理器架构、接口设计与可靠性工程之间的协同原理。MPC5121e处理器凭借其极低的功耗和高度集成的外设,为构建无风扇、全封闭系统提供了硬件基础,这直接提升了系统的平均无故障时间(MTBF)并简化了热管理设计。从技术价值看,这种设计权衡了性能、功耗与长期供货稳定性,特别适合对生命周期和恶劣环境适应性有严格要求的场景。例如,在需要部署大量节点并维护十年以上的物联网网关或工业控制系统中,主板提供的宽温选项

chengyixian7877的博客 304

cesium 高程数据使用

cesium 高程数据使用高程数据下载高程数据切片简单数据服务 高程数据下载 使用地理空间数据云平台免费提供的高程数据。地理空间云平台 点击列表中的下载得到数据压缩包。例如:ASTGTM2_N22E114.zip 高程数据切片 使用cesium实验室工具对下载得到的压缩包进行切片。cesium实验室 切片得到的文件夹目录。 简单数据服务 使用nodejs的koa启动简单的资源服务。koajs 项目根目录新建data文件夹,在新建dem文件夹放高程数据。 注意目录自行更换,这里是./data/dem

哎哟这个凉白白的博客 1811

Serial-Studio技术架构解析:开源串行数据可视化平台的完整实现

Serial-Studio是一款专业的跨平台串行数据可视化与处理平台,支持从UART串口、蓝牙低功耗(BLE)、MQTT、CAN总线、Modbus等多种协议获取实时数据。该项目采用Qt框架构建,提供完整的开源版本和功能增强的Pro版本,适用于嵌入式开发、工业自动化、科研实验等多个技术领域。本文将从技术架构、版本对比、核心功能实现等方面进行深度分析,为技术决策者和开发者提供全面的技术参考。 ##

gitblog_01074的博客 1085

六自由度机械臂运动学分析及其轨迹规划

六自由度机械臂轨迹规划 通过对比三次多项式插值法与五次多项式插值法的效果,选取后者对机械臂进行轨迹规划,将运动学解导入Matlab Robotics Toolbox仿真,得到各关节角度、速度和加速度与时间关系曲线。 三次多项式插值法 三次多项式有4个待定系数,可同时对起始点和目标点的角度和角速度给出约束条件。 数学公式 MATLAB代码 五次多项式插值法 五次多项式有6个待定系数,可同时对起始点和...

两条眉毛 6万+

ComfyUI 的 LoRA 训练:素材打标签与调优全攻略

标签是 LoRA 训练的"地基"——地基打不牢,后续调参再精细也难出好效果。记住:标签要"少而精",聚焦独特点,用触发词控效果。下一篇我们将讲解参数设置,让你的优质标签发挥最大价值~

2301_78150483的博客 3099

arm bluez 移植(测试)

1.        软件环境 主机:Ubuntu 13.04 开发板:s3c6410 Gcc : arm-none-linux-gnueabi-gcc 2.        内核支持 make menuconfig [*]Networkingsupport  --->                    Bluetoothsubsystem support  --->    //蓝牙

LXP 1163

《Python基础教程》专栏总结篇

今天给大家带来的文章是《Python基础教程》专栏总结篇,希望能对同学们有所帮助。 文章目录 1. 背景 2. 专栏亮点 3. 你的收获 4. 详细目录

weixin_43178406的博客 73万+
上一篇: 在嵌入式Linux上使用CF接口的Modem (CDMA/GPRS)
mlite
博客等级 码龄23年 11粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值