- Joined
- Jul 3, 2014
- Messages
- 931
- Motherboard
- Dell XPS 9360 (KabyLake R)
- CPU
- Intel i7 8550U
- Graphics
- Intel UHD 620
- Mac
- Mobile Phone
BrcmPatchRAM - 3rd party Broadcom Bluetooth USB devices on OS X
Introduction
A number of Broadcom Bluetooth USB devices do not have a persistent firmware.
These devices are only upgradable temporarily, called PatchRAM.
Everytime the computer reboots or resumes from sleep, the firmware in the USB stick will either be empty or running an old version.
In order to use these Bluetooth USB's with OS X, firmware needs to be uploaded each time OS X boots.
This functionality is already carried out by the Broadcom Windows drivers and is also available in most Linux flavours.
BrcmPatchRAM
BrcmPatchRAM is a kext driver which allows uploading bluetooth firmware into Broadcom USB devices on OS X.
It uses the vendor specific HCI commands as used in the *nix sample program supplied by Broadcom:
https://code.google.com/p/broadcom-bluetooth/source/browse/brcm_patchram_plus_usb.c
The kext allows to configure any Broadcom USB device in the IOKitPersonalities section of Info.plist.
Also it works when injected using Clover kext injection.
Firmware
Firmwares can be obtained from the Windows driver package, a recent of which can be found here:
http://drivers.softpedia.com/get/BL...etooth-Driver-6515800-12009860.shtml#download
In order to obtain the firmware for your device take the following steps:
Firmware Filename format
Note that the firmware configured in the Windows driver might not be the latest available firmware for your device in the package.
The firmware version displayed in OS X is the last number + 4096.
So for example firmware BCM20702A1_001.002.014.1443.1457 will display as "v14 c5553".
I have found that any firmware in the same range is generally compatible.
So for the example device above instead of BCM20702A1_001.002.014.1443.1457 it works fine with the newer BCM20702A1_001.002.014.1483.1651 firmware also.
Unsure if a newer version gives any other benefits, but does not hurt to try.
Download
BrcmPatchRAM can be downloaded from here: https://github.com/the-darkvoid/BrcmPatchRAM/releases
Source code is available here:
https://github.com/the-darkvoid/BrcmPatchRAM
Changes
v1.7
Credits to Rehabman for the work and development that made v1.7 possible.
v1.4
v0.5a:
v0.4:
v0.2:
v0.1:
Introduction
A number of Broadcom Bluetooth USB devices do not have a persistent firmware.
These devices are only upgradable temporarily, called PatchRAM.
Everytime the computer reboots or resumes from sleep, the firmware in the USB stick will either be empty or running an old version.
In order to use these Bluetooth USB's with OS X, firmware needs to be uploaded each time OS X boots.
This functionality is already carried out by the Broadcom Windows drivers and is also available in most Linux flavours.
BrcmPatchRAM
BrcmPatchRAM is a kext driver which allows uploading bluetooth firmware into Broadcom USB devices on OS X.
It uses the vendor specific HCI commands as used in the *nix sample program supplied by Broadcom:
https://code.google.com/p/broadcom-bluetooth/source/browse/brcm_patchram_plus_usb.c
The kext allows to configure any Broadcom USB device in the IOKitPersonalities section of Info.plist.
Also it works when injected using Clover kext injection.
Firmware
Firmwares can be obtained from the Windows driver package, a recent of which can be found here:
http://drivers.softpedia.com/get/BL...etooth-Driver-6515800-12009860.shtml#download
In order to obtain the firmware for your device take the following steps:
- Obtain the vendor ID and product ID of your bluetooth USB device.
This can be found in "About this Mac" -> "System Report" -> "Bluetooth".
For this example we will use my Bluetooth device, a Toshiba Bluetooth USB which is part of the BCM94352Z PCI NGFF WiFi/BT combo card.
The vendor ID of this device is 0x930, product ID is 0x223.
- Extract the Windows Bluetooth driver package and open the bcbtums-win8x64-brcm.inf file inside the Windows driver directory.
- Find your vendor / product combination inside the .inf file:
Code:%BRCM20702.DeviceDesc%=BlueRAMUSB0223, USB\VID_0930&PID_0223 ; 20702A1 Toshiba 4352
- Locate the mentioned "RAMUSB0223" device in the .inf file:
Code:;;;;;;;;;;;;;RAMUSB0223;;;;;;;;;;;;;;;;; [RAMUSB0223.CopyList] bcbtums.sys btwampfl.sys BCM20702A1_001.002.014.1443.1457.hex
- Copy the firmware hex file matching your device from the Windows package.
- The firmware file can now optionally be compressed using the included zlib.pl script:
Code:zlib.pl deflate BCM20702A1_001.002.014.1443.1457.hex > BCM20702A1_001.002.014.1443.1457.zhx
- After this a hex dump can be created for pasting into a plist editor:
Code:xxd -ps BCM20702A1_001.002.014.1443.1457.zhx | pbcopy
Firmware Filename format
Note that the firmware configured in the Windows driver might not be the latest available firmware for your device in the package.
The firmware version displayed in OS X is the last number + 4096.
So for example firmware BCM20702A1_001.002.014.1443.1457 will display as "v14 c5553".
I have found that any firmware in the same range is generally compatible.
So for the example device above instead of BCM20702A1_001.002.014.1443.1457 it works fine with the newer BCM20702A1_001.002.014.1483.1651 firmware also.
Unsure if a newer version gives any other benefits, but does not hurt to try.
Download
BrcmPatchRAM can be downloaded from here: https://github.com/the-darkvoid/BrcmPatchRAM/releases
Source code is available here:
https://github.com/the-darkvoid/BrcmPatchRAM
Changes
v1.7
- Re-write of firmware upload functionality resulting in faster and more stable uploads
- Publishing and Unpublishing of dynamic profile leads to faster recovery time when waking up from sleep (also for devices which do not require firmware uploads)
- Changed firmware for Toshiba 4352 Combo [0930:0233] to the Windows driver default after feedback the previous firmware did not work for everyone.
Credits to Rehabman for the work and development that made v1.7 possible.
v1.4
- Refactored logging
- Added support and firmware for the following devices:
- 0a5c:216e HP Blackbird 43162 NGFF
- 0a5c:22be Broadcom BCM20702 Bluetooth 4.0 USB Device (Personality only)
- 0489:e079 Lenovo China 43162 NGFF
- Updated firmware for 0b05:180a to v5810
- Updated firmware for 0930:0223 to v5805
- Version number displayed in system log now always corresponds with the version in the bundle plist
- Refactored dynamic personality publishing, including support for future OS X versions
- Resolved a bluetooth IOKit personality issue in Mountain Lion 10.8.5, credits to Kaminoreal
- Updated bundle dependencies to work with Snow Leopard, credits to Kaminoreal
- Updated firmware for the following devices:
- Updated [0489:e032] to BCM20702A1_001.002.014.1443.1485_v5581
- Updated [0489:e07a] to BCM20702A1_001.002.014.1483.1651_v5747
- Updated [04ca:200a] to BCM20702A1_001.002.014.1443.1492_v5588
- Updated [04ca:200c] to BCM20702A1_001.002.014.1443.1494_v5590
- Updated [050d:065a] to BCM20702A1_001.002.014.1443.1482_v5578
- Updated [0930:0221] to BCM20702A1_001.002.014.1483.1673_v5769
- Updated [0a5c:21e1] to BCM20702A1_001.002.014.1483.1647_v5743
- Updated [0a5c:21ec] to BCM20702A1_001.002.014.1443.1460_v5556
- Updated [13d3:3413] to BCM20702A1_001.002.014.1443.1481_v5577
- Updated [413c:8143] to BCM20702A1_001.002.014.1443.1449_v5545
- Added support for the following devices
- Added [13d3:3418] Azurewave (4352/20702 combo) with BCM20702A1_001.002.014.1443.1480_v5576
- Added [13d3:3435] Azurewave (4352/20702 combo) with BCM20702A1_001.002.014.1443.1501_v5597
- Added [0b05:180a] Azurewave (4360/20702 combo) with BCM20702A1_001.002.014.1443.1611_v5707
- Added [04ca:200f] Acer / LiteOn (4352 Combo) with BCM20702A1_001.002.014.1443.1521_v5617
- Added [0a5c:216f] Dell DW1560 (4352/20702) with BCM20702A1_001.002.014.1443.1572_v5668
- Added [0a5c:21fd] Broadcom 4352Z with BCM20702A1_001.002.014.1443.1463_v5559
- Added [0a5c:216b] HP Rapture 4352Z NGFF Combo with BCM20702A1_001.002.014.1483.1646_v5742
- Added [0a5c:21de] 4352/20702A1 combo with BCM20702A1_001.002.014.1443.1461_v5557
- Compatibility with:
- OS X Snow Leopard (64-bit only)
- OS X Lion (64-bit only)
- OS X Mountain Lion
- OS X Mavericks
- OS X Snow Leopard
- Added dynamic IOKit personality publishing for devices not present by default in OS X,
this makes it easier to add new devices to the configuration. - Added DisplayName IOKit personality property to allow specifying a name to display in USB devices
- BrcmNonApple.kext is now replaced by dynamic IOKit personality publishing & DisplayName functionality.
It is now removed. - Added process timing output
- This version of BrcmPatchRAM is using an event-driven continuous read model.
Boot-up time with the bluetooth device plugged in should be significantly faster.
The event-driven driver model is new and testing feedback is highly appreciated.
Report any issues using the GitHub issues functionality on the BrcmPatchRAM repository. - This release is extensively tested against:
0930:0223 Toshiba 20702A NGFF
0a5c:21e8 iOGEAR GBU521 USB Dongle
0b05:17cb Asus BT-400 USB Dongle - Updated 0930:0223 Toshiba 20702A NGFF firmware to v5770
- Updated 04ca:200a LiteOn (4352 combo) firmware to 5769
- BrcmPatchRAM is now compiled against OS X SDK 10.6.
- Added support for Inateck Bluetooth USB [0a5c:21ec]
- Added support for non-UHE Lenovo Bluetooth USB [0a5c:21e6]
- Added device specific firmware for IOGEAR/GMYLE USB bluetooth dongles [0a5c:21e8]
- BrcmPatchRAM now "re-synchronizes" if there are outstanding HCI events on the interrupt pipe while starting up
- BrcmFirmwareStore is now treated as a published resource
- Both Debug and Release builds are now included in the release
v0.5a:
- Added device specific firmware for Azurewave 4352HMB [13d3:1404]
- Fixed interaction between BrcmPatchRAM and BrcmFirmwareStore, resolving a problem where BrcmPatchRAM would not load.
- Added device specific firmwares for 0b05:17cf and 0b05:17cb
- Increased wait time for devices which require more time to settle after firmware upload
v0.4:
- Minor tweak to v0.3 to not issue an initial firmware version request as this seems to hang some devices.
- Implemented firmware caching, firmware is now cached after initial boot, leading to much faster wake-up from sleep performance.
- Additionally added BCM20702A1_001.002.014.1443.1457_v5553 firmware.
- Resolved a newly introduced problem where Bluetooth firmware would not upload properly after wakeup from sleep.
v0.2:
- Added BrcmFirmwareStore module to allow shared configured firmwares across devices
- BrcmFirmwareStore caches firmware instructions across firmware upgrades
- Added support for Dell Alienware (4352/20702A1 combo) (13D3:3411), credits skvo
- Added support for the following devices (untested):
- 20702 Combo (0489:E032)
- Lenovo NGFF (4352/20702) (0489:E07A)
- LiteOn (4352 combo) (04CA:200A)
- LiteOn (4352 combo) (04CA:200B)
- LiteOn (4352 combo) (04CA:200C)
- Belkin (20702) (050D:065A)
- Toshiba (4352/20702A1) (0930:0221)
- HP SoftSailing (20702A1) (0A5C:21E1)
- Bluetooth USB Dongle (20702A1) (0A5C:21E8)
- Asus (20702 standalone) (0B05:17CB)
- Asus (4352/20702A1 combo) (0B05:17CF)
- Azurewave (4352HMB) (13D3:3404)
- Azurewave (4360/20702 combo) (13D3:3413)
- Dell DW1550 (4352/20702 combo) (413C:8143)
- Added support for BCM94352HMB (0A5C:21FB), credits sirock
- Updated default BCM94352Z (0930:0223) firmware to v5747
v0.1:
- Initial version supporting BCM94352Z (0930:0223)