The purpose of this document is to describe how to enable Bluetooth on i.MX 6Dual/Quad SabreSD board (RevC) for Android software.
i.MX 6Dual/Quad SabreSD board doesn't enable Bluetooth connection by default. To support bluetooth, the hardware rework is required.
The above diagram shows the reserved connections for Bluetooth in SabreSD RevC board (All connections are marked as "DNP"). This Bluetooth cable connector is designed specifically for the WiFi/BT combo card SX-SDCAN-2830BT which is developed and sold by Silex Technology. Note that pin 1 (BT_DISABLE) of the cable connector on i.MX 6Dual/Quad SabreSD RevC is opposite Pin 20 of the WiFi/BT module. Note: when connecting Silex module and J13, the connection is reverted (For example, PIN 1 in J13 connects to PIN 20 in Silex module). To use the J13 connector, the following reworks are required:
Where is them, you can refer to the below chart.
Orange PAD connects to Orange PAD.
Green PAD connects to Green PAD.
After hardware rework, the Bluetooth connection will like the following:
Pin on Silex Module | Sabresd Board | Mux Pad |
---|---|---|
Pin-2 BT_UART_RTS (output) | UART5.RTS (input) | MX6Q_PAD_KEY_COL4__UART5_RTS |
Pin-3 BT_UART_TXD (output) | UART5.RXD (input) | MX6Q_PAD_KEY_ROW1__UART5_RXD |
Pin-4 BT_UART_CTS (input) | UART5.CTS (output) | MX6Q_PAD_KEY_ROW4__UART5_CTS |
Pin-5 BT_UART_RXD (input) | UART5.TXD (output) | MX6Q_PAD_KEY_COL1__UART5_TXD |
Pin-14 BT_PWD_L (input) | GPIO_2 (output) | MX6Q_PAD_GPIO_2__GPIO_1_2 |
For earlier android version before Jelly Bean4.2
Take ICS as an example, for we didn't do this work when our last ICS version R13.4.1 released. So our formal release had no support on BT. Here will give out patches based on R13.4.1.
Enable Bluetooth with the following setting (e.g. device/fsl/imx6/sabresd/init.rc)
# No bluetooth hardware present
- setprop hw.bluetooth 0
+ setprop hw.bluetooth 1
Ensure BOARD_HAVE_BLUETOOTH := true in device/fsl/imx6/sabresd/SabreSDBoardConfigComm.mk.
Add BT feature support in device/fsl/imx6/sabresd/required_hardware.xml:
<permissions>
<feature name="android.hardware.camera" />
+ <feature name="android.hardware.bluetooth" />
Add UART5 support in kernel:
In this step you can refer to the attached (kernel patch for UART5 based on ICS.zip) to change PinMux PAD configuration for UART5.
Add AR3002 BT firmware support:
Update external/linux-firmware with the attached patch(0001-ENGR00270791-BT-add-AR3002-firmware-support.patch) to add AR3002 BT firmware support for Silex's BT is AR3002.
Then you can manually run the command “hciattach -n -s 115200 /dev/ttymxc4 ath3k 115200 flow nosleep” in console to see whether bluetooth can attach HCI successfully.
At last, you need add rfkill for BT reset in kernel, here also give a patch for reference:
0001-ENGR00270791-BT-add-rfkill-for-bt-reset.patch
BT is not enable in kernel default. You can control whether to enable it in bootargs like the following in device/fsl/sabresd_6dq/BoardConfig.mk.
BOARD_KERNEL_CMDLINE := console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off video=mxcfb2:off fbmem=10M fb0base=0x27b00000 vmalloc=400M androidboot.console=ttymxc0 androidboot.hardware=freescale bluetooth
For android version since Jelly Bean4.2
From Jelly Bean4.2, Bluez is no longer used.Android provides a default Bluetooth stack, BlueDroid, that is divided into two layers: The Bluetooth Embedded System (BTE), which implements the core Bluetooth functionality and the Bluetooth Application Layer (BTA), which communicates with Android framework applications. A Bluetooth system service communicates with the Bluetooth stack through JNI and with applications through Binder IPC. The system service provides developers access to various Bluetooth profiles. The following diagram shows the general structure of the Bluetooth stack:
For bluedroid, we have supported it in our formal release including Android4.3. You can get it from our website. Or just get HAL code from attached(libbt-ath3k.zip).
Known issue
For KEY_COL4 is both used by uart5 and pcie, if you enable BT, 3G mobile will not work. For its power disable pin is conflict with uart5's UART_RTS. This is
also why we didn't enable BT in formal release.
workable profile | not tested profile |
---|---|
Hid | Handset & Handfree(not support for hardware restrict) |
A2DP | |
Pbap | |
Opp | |
Pan |
I could not find the reference code that was mentioned in the first version of the post: "Attachment is the reference codes about libbt-vendor.so for AR3001." Is it included in JB 4.2.1. alfa already?
What you see "Attachment is the reference codes about libbt-vendor.so for AR3001" is included in JB4.2.2 official release. What you see maybe our first version. Now we have updated it. For AR3001 and AR3002, our JB4.2.2 release will all support it. If you just need codes for libbt-vendor. I attached it here
Thank you. The source code will be helpful while 4.2.2 is not available to customers.
What changes we need to do if we are using BT-USB interface(we using ath3k.ko driver from kernel) to bludriod stack to communicate with lower level driver. If we check the Bluedroid stack, it's hardcoded to use UART interface to communicate with lower level chip.
Please guide us what changes we need to do or is there any patches availble for this BT-USB feature.?
Sorry, For USB HCI, it should be considered by Google. It is only for UART HCI now. We don't focus on this.
Useful information on this topic is also available here : https://community.freescale.com/servlet/JiveServlet/previewBody/95006-102-1-6867/142-00207-517_iMX6X...
Enable BT on i.MX6SL EVK: https://community.freescale.com/docs/DOC-95016
hi sir
do you have any update for supported profile?like HFP,HSP
thanks!!
NO
hi, you said "we have supported it in our formal release including Android4.3" can you give me a link for this ? i can not find it, thanks.
Hi LilyZhang, could you help to assign someone to answer this question? Thanks.
Hi Gong,
Please start a discussion for your question so that it can be seen and assigned by our support team.
Thanks,
Grant
thanks ,i start discussion for the question in "How to enable BT on board imx6q_sabresd" my bluetooth service isn't started.give me a favor!
Hi Jianzheng,
My customer is testing the Bluetooth on i.MX6Q SABRE-SDP & Linux BSP(L3.0.35_4.1.0).
And, they modified the software by referring this community.
They connected a Bluetooth module(AR3002) with UART connector (J13).
But, when they tries to be an attach using hciattach, it sometimes looks a timeout-error!
[Test Result]
- It increase the success rate by setting the governor to "powersave".
- it always time-out when setting governor to "performance". (Frequency of occurrent: 20 %).
Do you have any idea to solve this issue?
And, the issue occurred even if it sets governor to powersave in Linux BSP(L3.10.17_1.0.0).
But, it doesn't time-out when setting SDMA = off in kernel config.
Is there way to prevent the time-out with SDMA = on?
BR,
Keita
keitanagashima, if your issue is related to UART DMA mode,
please consider to try to integrate some patches for i.MX uart drivers or SDMA to latest one based on latest version.
You can find some patches under
Hello,
I would like to know if the hardware rework also applies to MCIMX6Q-SDB. My board has the following markings/stickers:
SCH27516 REV C4
700-27516 REV B
I have been trying to add the generic USB bluetooth "btusb" driver to the Linux kernel via "bitbake -c menuconfig", so that I can use my USB bluetooth dongle, and would like some clarification regarding the board's bluetooth functionality. Any help would be appreciated.
Regards,
Alvin
Hi Alvin,
Your board can be reworked to support BT function.
The wifi-BT module can be found here:
SX-SDCAN | Radio Modules | Silex Technology America
Hi,
Any of one can help me to do software configuration for Bluetooth in the Linux Kernel 3.10.53 (Not an Android) for the same Chip.
We had done the wiring for BT in SoLolite EVK board.
No where mention about supporting in Linux kernel.
Thank you in Advance.
Regards,
Dooty.
Hi,
I am using bluez 5.30 in android Kitkat 4.4.2, It's working fine and i am getting all the profiles except spp. if i try to browse spp it shows an error like "No SDP records found". Can anyone please help me to solve this problem.
Hi,
I am a beginner for iMX6 and currently working on iMX6 Quad SABRE-SD board. I want implement Wi-Fi/BT modules on the same. This post is very useful. But, I have a doubt regarding MUX PAD, I don't have any idea on this.
Is this should be connected between BT module(on iMX6 board) and Silex module? What is the use of this here?
Please provide your suggestions on this.
Regards,
Bharathi