6626常问问题
6626还支持gpio引脚任意映射吗
不支持任意映射,这个需要按照我们的pinmux映射表来进行配置,每个pin脚可以映射为哪些外设脚,除了在datasheet上可以看到之外,还可以在drv_pinmux.h中可以找到。
gpio13怎么配置成复位脚
drv_pmu_pin_io13_reset_mode_enable
怎么提高代码的执行速率
1、倍频: drv_pmu_xtal32m_x2_startup drv_rcc_clock_set (RCC_CLK_CPU, 1)) 2、keil中不再使用 MicroLIB 3、关键重复性的代码放在ram中 4、使用更高优化等级
怎么降低功耗
1、关键重复性的代码放在ram中
默认支持的广播个数在哪看
1、以simple工程为例,默认是只有一个广播的,这个配置是在: Projects_OM6626\hal\device\om6626\rom_lib\current\config\autoconf_preset_ble_1peripheral.h中有一个宏进行控制 #define CONFIG_LE_HOST_ADV_SET_NUM 1 2、如果是ble_app_multilink工程的话,默认是可以开4个广播,这个配置在: Projects_OM6626\hal\device\om6626\rom_lib\current\config\autoconf_preset_ble_full.h中有一个宏进行控制 #define CONFIG_LE_HOST_ADV_SET_NUM 4 其实不同工程加载的配置可以在kei→魔术棒→Asm→Define中看到对应的宏配置,一般: 单连接是CONFIG_LIB_PRESET_BLE_1PERIPHERAL 多连接是CONFIG_LIB_PRESET_BLE_FULL 通过控制上面的宏,在 Projects_OM6626\hal\device\include\autoconf_preset.h中决定加载哪个.h文件,目前有以下几部分: 1、CONFIG_LIB_PRESET_NO_BLE 2、CONFIG_LIB_PRESET_BLE_FULL 3、CONFIG_LIB_PRESET_BLE_1PERIPHERAL 比如simple工程用的就是这个,这个就是只支持1个广播 4、CONFIG_LIB_PRESET_BLE_MESH 5、CONFIG_PROJECT_ROM_BOOT 上面5个会选择其中一个进行加载。
6626中simple工程能同时开启多个广播吗?
这个不能,多广播只能在主从例程里面,simple工程属于单从例程,这个只能有一个广播,这个设置的位置是在 autoconf_preset_ble_1peripheral.h里面设置的,可以看到#define CONFIG_LE_HOST_ADV_SET_NUM 1是1,这里 即使改为 2,也是不能设置多个广播的,设置第二个广播会显示未知原因(reason = 5)关闭第二个广播。
不同工程的shell指令是通用的吗
目前来看不同的shell指令使用的都是下面路径下的.c文件: Projects_OM6626\components\shell
6626在进行dfu升级的时候,nrf软件找不到升级按钮
这个是由于 6626的dfu服务改变了uuid所致,可以自己修改uuid如下: void service_onmicro_dfu_init(void) { static const uint8_t serv_dfu[2] = {0x59, 0xFE}; static const uint8_t char1[16] = {0x50, 0xEA, 0xDA, 0x30, 0x88, 0x83, 0xB8, 0x9F, 0x60, 0x4F, 0x15, 0xF3, 0x01, 0x00, 0xC9, 0x8E}; static const uint8_t char2[16] = {0x50, 0xEA, 0xDA, 0x30, 0x88, 0x83, 0xB8, 0x9F, 0x60, 0x4F, 0x15, 0xF3, 0x02, 0x00, 0xC9, 0x8E}; static const uint8_t char3[2] = {0x03, 0x00}; static const ob_gatt_item_t atts_dfu[] = { { ob_att_char_def, OB_UUID_16BIT, OB_ATT_PROP_READ }, { char1, OB_UUID_128BIT, OB_ATT_PROP_NTF | OB_ATT_PROP_WRITE }, { ob_att_cccd_def, OB_UUID_16BIT, OB_ATT_PROP_READ | OB_ATT_PROP_WRITE }, { ob_att_char_def, OB_UUID_16BIT, OB_ATT_PROP_READ }, { char2, OB_UUID_128BIT, OB_ATT_PROP_WRITE_CMD }, { ob_att_char_def, OB_UUID_16BIT, OB_ATT_PROP_READ }, { char3, OB_UUID_16BIT, OB_ATT_PROP_READ | OB_ATT_PROP_WRITE | OB_ATT_PROP_NTF }, { ob_att_cccd_def, OB_UUID_16BIT, OB_ATT_PROP_READ | OB_ATT_PROP_WRITE }, }; static const ob_gatt_serv_t att_serv_dfu = { serv_dfu, OB_UUID_16BIT, sizeof(atts_dfu) / sizeof(atts_dfu[0]), atts_dfu }; ob_gatts_add_service(&att_serv_dfu, &m_start_handle); }
6626频偏测试函数在哪?
/** * @brief Change xtal 32m params * * @param[in] load_capacitance load capacitance, range:0~63, default:32, step:0.379pF(<20ppm), max:23.877pF * * @note load_capacitance will effect xtal 32m precision and frequency offset. * * @return None **/ void drv_pmu_xtal32m_change_param(int load_capacitance) { if(load_capacitance >= 0) { REGSW(&OM_PMU->CLK_CTRL_2, MASK_STEP(PMU_CLK_CTRL_2_CT_XTAL32M, load_capacitance), false/*should_update*/, 10/*delay_us*/); } }
6626事件id会有针对性吗,还是要自己做逻辑判断?
比如,在连接的时候,会有OB_GAP_EVT_CONNECTED事件,这个是每个事件回调都会进入,所以只要你有 相关if的判断,那么就会执行该逻辑,所以,如何区分服务属性,只能通过句柄的方式自己判断,底层 不会帮我们做这个判断的。 eg: if (req->att_hdl == m_tspp_start_handle + IDX_TSPP_NOTIFY_DESC) 由于每个服务的m_tspp_start_handle这个都是静态的,所以每个服务的这个起始句柄也是不一样的,再 搭配上每个服务独有的特性列表,即可找到蓝牙通信对应的服务属性。
6626中的rom外设重写是什么意思
这个实际上就是注释宏,然后重编译: 1、在 hal/device/om6626/rom_lib/current/config/RTE_om6626.h中,设置宏 RTE_{XXX}_USING_ROM_SYMBOL 为 0 2、添加一个新驱动到工程中,并重新写这个驱动
6626的adc精度是多少?
6626发射功率函数是哪个?
drv_rf_tx_power_set(),这个在drv_radio.c文件内
6626广播参数中有一个tx_pwr,这个可以设置广播发射功率吗硬件没有实现这个功能,我们要设置这个发射功率,还需要使用drv_rf_tx_power_set()进行设置。
6626怎么更新连接参数
我们可以在app_adv.c中的app_adv_event_cb函数内的evt_id == OB_GAP_EVT_CONNECTED分支内发起连接参数更新请求。 注:一般蓝牙连接之前(比如广播,扫描,连接,配对等 ),以及断连之后的蓝牙接口操作都在omble_gap.h中。连接之后的服务通信接口函数都在omble_gatt.h(从机接口)中,如果是做主机则在app_gatt_client.c文件内
广播,连接等这些单位是多少?
广播讲个单位是0.625ms,连接间隔的单位是1.25ms,从设备延时的单位是连接间隔的个数,超时时间的单位是 10ms