Перейти к содержанию
    

BlueNRG-MS Init

Доброго времени суток, форумчане.

 

Имеется проект на BlueNRG-MS. За основу программной настройки и управления взят проект "SampleAppThT". Режим Server.

 

Выполняю настройку следующим образом:

main
{
 ....
 BNRG_SPI_Init();
 /* Initialize the BlueNRG HCI */
 HCI_Init();

 /* Reset BlueNRG hardware */
 BlueNRG_RST();
 wait_IRQ_SPI_FLAG();

 getBlueNRGVersion(&hwVersion,&fwVersion);
 printk("hwVersion = 0x%X fwVersion = 0x%X Version = %X",hwVersion,fwVersion,Version);

  /* Reset BlueNRG hardware */
 BlueNRG_RST();
 wait_IRQ_SPI_FLAG();

 Osal_MemCpy(bdaddr, SERVER_BDADDR, sizeof(SERVER_BDADDR));
 ret = aci_hal_write_config_data(CONFIG_DATA_PUBADDR_OFFSET,CONFIG_DATA_PUBADDR_LEN,bda
ddr);
 printk_co(GREEN,"aci_hal_write_config_data() ret=0x%X",ret);

 ret = aci_gatt_init();
 printk_co(GREEN,"aci_gatt_init() ret=0x%X",ret);


 ret = aci_gap_init(GAP_PERIPHERAL_ROLE, 0, 7, &service_handle, &dev_name_char_handle, &appearance_char_handle);
 //appearance_char_handle - 8;
 //service_handle  - 5;
 //dev_name_char_handle - 6;
 printk_co(GREEN,"aci_gap_init() ret=0x%X",ret);
 printk_co(GREEN,"service_handle = 0x%X dev_name_char_handle = 0x%X appearance_char_handle = 0x%X",service_handle,dev_name_char_handle,appearance_char_handle);


 aci_gatt_update_char_value(service_handle, dev_name_char_handle, 0,strlen(name), (uint8_t *)name);  
 printk_co(GREEN,"aci_gatt_update_char_value() ret=0x%X",ret);

 ret = aci_gap_set_auth_requirement(MITM_PROTECTION_REQUIRED,OOB_AUTH_DATA_ABSENT,0, 7,16,USE_FIXED_PIN_FOR_PAIRING,123456,BONDING);
 printk_co(GREEN,"aci_gap_set_auth_requirement() ret=0x%X",ret);//

 ret = Add_Acc_Service();
 printk_co(GREEN,"Add_Acc_Service() ret=0x%X",ret);//7

 ret = Add_Environmental_Sensor_Service();
 printk_co(GREEN,"Add_Environmental_Sensor_Service() ret=0x%X",ret);

 ret = aci_hal_set_tx_power_level(1,4);
 printk_co(GREEN,"aci_hal_set_tx_power_level() ret=0x%X",ret);
 ....
 }

void setConnectable(void)
{  
 tBleStatus ret;

 //const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME,'B','l','u','e','N','R','G'};

 hci_le_set_scan_resp_data(0,NULL);
 printk("General Discoverable Mode.\n");

 ret = aci_gap_set_discoverable(ADV_IND, 0, 0, PUBLIC_ADDR, NO_WHITE_LIST_USE,
							 sizeof(local_name), local_name, 0, NULL, 0, 0);  

 printk_co(GREEN,"aci_gap_set_discoverable() ret=0x%X",ret);
 if (ret != BLE_STATUS_SUCCESS) {
  printk("Error while setting discoverable mode (%d)\n", ret);

 }  
}

В результате наблюдаю следующую картину видимости моего устройства:

RSSI graph

 

Устройство доступно в течении ~3-5 сек с периодом ~30 сек.

Тактирование - HSI=16MHz. LSE - ext 32.768kHz

 

Подскажите пожалуйста, в чем может быть проблема?

С отладочной платой IDB04A1 все работает - модуль видится постоянно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Устройство доступно в течении ~3-5 сек с периодом ~30 сек.

Картинку, к сожалению, мне не видно (локальные проблемы с дропбоксом), но могу предположить, что это признаки медленно стартующего кварца.

 

Что это такое и как лечить, описано в AN4494

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я правильно понимаю - речь о внешнем LSE 32,768кГц?

Как вы думаете, перевод на внутренний генератор должен решить данную проблему?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Речь о параметре HS_Startup_Time, который зашивается в конфигурационную область флеша.

 

Если он меньше, чем реальное время запуска кварца (который high speed, не RTC), поведение чипа становится неадекватным (у меня не было стабильных периодов "неработы", но, видимо, это то же самое).

 

Его надо померять на Вашей железке (осциллографом, методика описана в appnote), и потом запрограммировать во все устройства (в ST'шном стеке есть функция program_IFR()).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть один интересный и не понятный мне момент - если я сделаю активным CS ("0"),и буду его удерживать на интерфейсе SPI - то модуль радиодоступен на время удержания линии CS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть один интересный и не понятный мне момент - если я сделаю активным CS ("0"),и буду его удерживать на интерфейсе SPI - то модуль радиодоступен на время удержания линии CS.

Проблема решилась обновлением стека Bluenrg-MS.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...