Небольшая утилита для изменения настроек интерфейса Bluetooth чипов производства CSR. Поддерживаются следующие команды: 1) Настройка UART интерфейса. Используется для базовых настроек UART интерфейса через регистры блока UART_PS_BLOCK. csr_interface [-v] [--dump] --get-uart Позволяет получить текущие настройки UART интерфейса. Если использовать ключ --dump то результат будет в виде shell скрипта, который восстанавливает текущие настройки. Ключ -v выводит HCI запросы, которые отправляются Bluetooth адаптеру и его ответы. csr_interface [-v] --set-uart [--stores=] [--baud=] [--stop-bits=<1|2>] [--parity-bits=<0|1>] [--parity=] [--flow=] [--bcsp-hardware=] Изменение настроек UART порта. Используются следующие параметры: --baud - скорость порта в bps; --stop-bits - количество стоповых битов; --parity-bits - наличие бита четности; --parity - чет/нечет; --flow - включить аппаратное управление потоком; --bcsp-hardware - протокол обмена: yes - bcsp, no - h4. Подробней остановимся на ключе --stores. Дело в том, что для храненя конфигурационной информации CSR определяет пять видов хранилища. Нас интересуют только следующие три: DEFAULT - текущие настройки. Загружаются в момент старта чипа. Можно только читать. PSRAM - хранилище в ОЗУ чипа. Эти настройки используются при "мягком" сбросе чипа (копируются в DEFAULT). PSI - постоянное хранилище. Эти настройки используются при "жестком" сбросе (копируются в PSRAM, а дальше - в DEFAULT). Для нормальной работы, все изменения нужно сохранять в PSI, но в случае какой-либо ошибки мы рискуем получить нерабочий Bluetooth модуль. Поэтому, все настройки лучше всего проверить на PSRAM. Для этого, в качестве параметра ключа --stores необходимо указать tmp, а затем сделать "мягкий" сброс устройства командой csr_interface --reset. Подробней смотрите в примере. Не обязательно указывать все ключи. Например, если необходимо изменить только скорость, то достаточно указать только ключ --baud, а значение остальных параметров останется без изменений. 2) Непосредственное изменение регистров UART_PS_BLOCK Используется для непосредственного манипулирования регистрами UART_PS_BLOCK на тот случай, если необходимо изменить некий параметр, который невозможно изменить в пункте 1. csr_interface [-v] [--dump] --get-uart-ps Выводит текущие значения регистров. Всего их 10. К сожалению, в официальной документации от CSR никакого упоминания об этих регистрах нет. Вся информация получена из [1]. Назначение ключей -v и --dump аналогично п.1. csr_interface [-v] --set-uart-ps [--stores=] --address=<0..9> --value=0x<16-bit hex> Установка конкретного значения конкретного регистра. Регист имеет размерность 16 бит. Назначение ключей -v и --stores аналогично п.1. 3) Установка интерфейса csr_interface [-v] [--dump] --get-interface Выводит текущий интерфейс: usb - USB; bcsp - UART, протокол BCSP или h4 - UART, протокол H4. csr_interface [-v] [--stores=] --set-interface= Устанавливает интерфейс. Заставить работаь hciattach на чем-нибудь отличном от BCSP, к сожалению, не удалось. Если используется интерфейс BCSP, то необходимо в п.1 использовать параметр: --bcsp-hardware=yes Назначение ключей -v и --stores аналогично п.1. 4) "Мягкий" сброс чипа csr_interface --reset 5) Usage сообщение csr_interface -h Пример: Допустим, у нас имеется CompactFlash Bluetooth адаптер, который работает на скорости 115200 bps, но потенциально может работать и на более высокой скорости. 1) запускаем hciattach. eee-pc:~# hciattach /dev/ttyS3 bcsp 115200 noflow eee-pc:~# hciconfig hci0: Type: USB BD Address: 00:09:DD:10:0F:FB ACL MTU: 192:8 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN RX bytes:982 acl:0 sco:0 events:24 errors:0 TX bytes:378 acl:0 sco:0 commands:23 errors:0 2) Узнаем текущие настройки порта. eee-pc:~# csr_interface --get-uart baud: 115200 stop bits: 1 parity bits: 1 parity: even flow: no hardware: BCSP 3) На всякий случай дампим значене всех регистров. eee-pc:~# csr_interface --dump --get-uart-ps > bt_dump.sh 4) Меняем скорость в PSRAM eee-pc:~# csr_interface --set-uart --stores=tmp --baud=921600 5) Делаем "мягкий" сброс eee-pc:~# csr_interface --reset 6) Здесь должна быть потеряна связь с устройством, поэтому необходимо перезапустить hciattach. eee-pc:~# killall -9 hciattach eee-pc:~# hciattach /dev/ttyS3 bcsp 921600 noflow eee-pc:~# hciconfig hci0: Type: USB BD Address: 00:09:DD:10:0F:FB ACL MTU: 192:8 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN RX bytes:982 acl:0 sco:0 events:24 errors:0 TX bytes:378 acl:0 sco:0 commands:23 errors:0 7) Если все в порядке и устройство нормально определилось, то данную скорость можно смело сохранять в постоянное хранилище. eee-pc:~# csr_interface --set-uart --stores=perm --baud=921600 8) Все. Используемая литература: 1. http://www.iral.com/~albertr/linux/psion5mx/blue/