专用调试板

引言


开发用于测试其电路的设备时,通常使用调试板。 我们的开发人员也不例外,这种方法的积极方面所带来的好处是显而易见的:成本低于原型或测试批次的生产。 而且,如果在过程中弹出错误,或者某些任务出现新的解决方案,则应用起来会容易得多。

但是,我们经常会遇到这样一个事实,即市场上提供的调试需要大量改进和/或附加模块。 同时,出现了取决于特定设备的其他限制。 如果我们要从头开始开发控制板和无线模块,则相对顺序在面包板上。

当出现第二个和更常见的场景时,问题就开始了,而我们正在处理已经开发的技术的现代化。 由于主要的限制因素-产品的最终价格-电路的变化应最小。 在布局阶段,必须创建许多倍受欢迎的“集体农场”。


来源

怎么办


家用电器中的控制板通常简单,技术含量低-它们的印刷基板为单层,一侧没有金属化层和掩模。 这些板的简单性由设备本身的最终价格决定-设备的生产越复杂,其出售的价格就越高。 显然,大众消费者将不希望也不会为复杂性支付过多的费用。


典型的家用电器控制板代表

在工作中,我们出现了几种标准的无线模块,从RM2到RM10。 这些基于SoC解决方案的模块充当中央控制器,还允许您通过空中控制设备。

该无线模块产品线的设计使其可以安装在控制板上,而只需对其进行最少的改动即可。 为了确保较高的开发速度,迫切需要制作一个调试板,其中已经存在智能家用电器所需的一切。

释放调试板的另一个理由是为第三方开发人员开放了Ready for Sky平台。 我们开始通过电子邮件接收建议和请求,以使独立开发人员或DIY开发人员可以访问该平台。 甚至在哈布罗夫的下午也有类似的报价。

侦错


因此,我们做到了-RFS-DEV001的第一个版本。 调试板的核心是RM10模块。 基于符合蓝牙5标准的nRF52832芯片,它支持网状网络和低功耗蓝牙。 此外,实时时钟用于调试,实现了三种电源选项(电池,来自PC的USB,来自电源的外部)。 两个按钮,一个蜂鸣器和一个RGB二极管发出信号并闪烁。 板上的所有组件均选自现在用于家用电器的批量生产中的组件。

除了测试控制方案之外,开发人员还将能够立即确定并优化组件成本,这最终将影响其智能设备的价格。



该板对于DIY展位将很方便,其中有些人对编程不是很感兴趣,或者他们刚刚开始学习。 我们看到了促进他们工作的机会,例如,使开发板与Arduino兼容。 显然,这是业余和教育形式,但其使用首先不会通过调试取消专业工作,其次大大提高了专业人员进入该行业的便利性。

完全有可能在大学和专业技术学校之间分配费用以教授初中生,从而为将来的专家做出贡献。

保证正常工作的插件列表




API


由于没有程序代码,调试将不是一件有用的事情,因此有必要讨论一下API,该API旨在使开发人员可以在平台开放时专注于其设备的功能,并从众多蓝牙设置中抽象出来,等等。

因此,R4S API包括:

  • 一组提供典型和特定服务操作的库,例如,包含基本蓝牙设置的主库和专注于设备功能的库;
  • API上实现的设备或功能的示例;
  • 连接到调试板的外围设备的驱动程序,请参见上面的列表。

您可以通过使用Bezier曲线通过亮度的平滑变化使用LED灯创建照明效果的示例来稍微了解一下API的功能。


切换到穿透模式后,灯泡将平滑地改变发光的颜色

在主文件中,您将需要独立确定基本信息,例如,有关固件的信息,声明设置(引导加载程序的位置,用于更新固件的缓冲区等)。

/** Firmware information structure */ R4S_FW_INFO_DEF(application, 0x26000) = { .version = { .major = 0, /** Product version (major) */ .minor = 1, /** Product version (minor) */ }, .name = { /** Device name */ .name = "RGB Lightbulb", .len = sizeof("RGB Lightbulb") - 1 /** Without \0 symbol at the end*/ } }; /** The init structure with the device information wich required for ReadyForSky library. */ R4S_CONFIG_DEF(r4s_init_conf) = { .p_fw_info = &application, .production_key = NULL, /** * The production key allows integrating the device into ReadyForSky infrastructure. * Contact support to get the production key for your device. */ .bootloader = { .start_address = 0x7B000, /** Bootloader start address */ .mbr_param_page = 0x7f000, /** MBR param page address */ .fw_upgrade_buf = { /** The firmware upgrade buffer is used for background flashing. * The region size should more than softdevice + bootloader + application size + 4096 */ .p_api = &nrf_fstorage_sd, /** fstorage api */ .start_addr = 0x35000, /** start address of firmware upgrade buffer */ .end_addr = 0x78000, /** end address of firmware upgrade buffer */ .chunk_size = 0, /** default chunk size */ } }, .company_info = { .p_company_name = "Imperium of Mankind", }, .watchdog = { .timeout_ms = 5000, /** If loop or priority will not finish after 5 seconds watchdog will reset microcontroller automatically */ }, .low_power_mode_enable = true, /** Low power ble settings */ } 

设备的开发类似于Arduino的开发。 有一个设置功能可初始化主模块并在其中进行处理的循环。 应用程序功能本身根据执行的不同操作分为模块。

 /** @brief Application initialisation * @return none */ void app_setup(void) { m_pairing_init(m_led_ctrl_pairing_handler); m_led_ctrl_init(); } /** @brief Application loop * @return true - sleep is not allowed * @return false - All modules have completed operation, the mcu can enter into sleep mode. (the next loop iteration will be after any interrupt) */ bool app_loop(void) { return NRF_LOG_PROCESS(); } 

在文件(“ m_resources.c”)中声明资源后,例如灯泡动画,引脚分配(多个LED组),颜色等,库将确定其余参数。

 /** Animation timer definition for m_rgb */ APP_TIMER_DEF(animation_timer_id); /** Leds pin map for m_rgb*/ static const r4s_rgb_ctrl_led_t m_leds_map[LEDS_COUNT] = { { .color = { .red_pin = RED_LEDS_0_PIN, .green_pin = GREEN_LEDS_0_PIN, .blue_pin = BLUE_LEDS_0_PIN, } }, { .color = { .red_pin = RED_LEDS_1_PIN, .green_pin = GREEN_LEDS_1_PIN, .blue_pin = BLUE_LEDS_1_PIN, } }, { .color = { .red_pin = RED_LEDS_2_PIN, .green_pin = GREEN_LEDS_2_PIN, .blue_pin = BLUE_LEDS_2_PIN, } }, }; /** PWM map for m_rgb */ static const r4s_rgb_ctrl_pwm_map_elem_t m_pwm_map[LEDS_COUNT] = { { .color = { .p_pwm_red = &pwm0, .p_pwm_green = &pwm0, .p_pwm_blue = &pwm0, } }, { .color = { .p_pwm_red = &pwm1, .p_pwm_green = &pwm1, .p_pwm_blue = &pwm1, } }, { .color = { .p_pwm_red = &pwm2, .p_pwm_green = &pwm2, .p_pwm_blue = &pwm2, } }, }; /** RGB lamp definition */ R4S_RGB_CTRL_DEF(m_rgb, m_leds_map, m_pwm_map, &animation_timer_id, LEDS_COUNT, 3); 

绑定后,应用程序接收设备可以执行的数据(在本例中为灯泡),并显示相关信息。



此外,通过该应用程序,您可以控制参数-强度,颜色,温度等。


现在,代码正在原型调试中制定出来,因此,使电路板和上部图像之间的差异不再困扰您。

其他功能包括:

  • 多重连接-多个智能手机同时连接到模块。 当您尝试同时控制设备时,此功能可能会导致问题。 我们试图解决这些问题,包括通过在所有已连接的智能手机上进行通知的方式-当一部手机更改参数时,有关新参数值的信息将立即发送给其他手机;
  • 快速闪烁-通过蓝牙传输的数据包的大小取决于MTU 。 随着MTU的增加,随着数据包大小的增加,刷新过程将更快。
  • 由微控制器的功能确定的典型错误列表。 如果检测到错误,则显示“没有足够的存储空间供软设备使用。 有关更多信息,请启用sdm debug。

为了进行调试,将发布R4S工程应用程序,该应用程序具有与常规功能相同的功能,但是通过它可以控制开发板。 原则上,通过工程应用程序,您可以管理公寓中的组装设备-这对于DIY来说是一个不错的部分。 这应该有助于新手开发人员支持该设备。 在主要的R4S应用程序中,此类设备将在我们协调和质量控制之后出现。

我们还将在公司的日常工作中使用调试,包括在培训新员工时。 如您所想,Habrovchane会起飞吗? 您对使用这种调试感兴趣吗?

Source: https://habr.com/ru/post/zh-CN429822/


All Articles