使用ST-Link和Clion + OpenOCD使用nRF51822

下午好,哈伯社区!


因此,技术大学学生的时机已经到了。 因此,现在是进行家庭项目并征服微电子技术新高度的时候了。 今天,我将讨论基于NRF51822芯片的开发板的研究,该芯片是Nordic Semiconductor的一种过时的蓝牙模块。 该公司以其低功耗无线电模块而闻名,NRF51822芯片也不例外。 但是我们不会从这个话题上分心。 让我们谈谈铁。


创建调试架


早在10月,就订购了yj-14015-nrf51822板用于蓝牙测试。 购买没有为电子爱好者提供标准电线的引脚连接器的电路板是一个坏主意。


yj-14015-nrf51822

yj-14015-nrf51822


接触点之间的距离小于1毫米,这给我带来了很大的困难,我对焊接经验极为谦虚。 板上的输出不是为焊接到电线而设计的,很容易脱落。 这就是唯一的电源VDD。 但是在邻居的努力下,可以将导线焊接到板上电容器的输出。 一起焊接了GND,SWDIO,SWCLK和其他一些GPIO输出。 结果是外观与科学怪人相似:


焊接板

焊接板


我们将使用ST-Link V2调试并刷新设备,连接图非常简单且合乎逻辑:


ST-Link V2nrf51822
3.3伏Vdd
地线地线
软件软件
时钟时钟

与科学怪人不同,单次放电不足以恢复该模块。 首先,我尝试使用STM32 ST-LINK实用程序读取nrf51822内存。 需要注意的是,这适用于STM32开发板,但不适用于nrf。 因此,我与董事会的工作暂时停止了。 稍后,我发现了有关使用nrf51822的文章1文章2 。 它包含指向SDK的链接以及有关如何组织nrf内存的详细说明。 与我们不同,本文的作者使用了更昂贵的JLink调试器。 如果您是一个贫穷的学生,廉价的解决方案非常重要:)。


学习SDK


如果您想使用蓝牙功能, 这对于蓝牙芯片来说非常合乎逻辑 您将必须在nrf5可编程存储器的开头放置所谓的“软设备”。 它以固件形式出现,并包含蓝牙功能。 其余的内存将写入固件。 从中,您可以调用软设备过程来配置蓝牙。


有几种不同的软设备。 对于nrf51,可以使用s110(对于服务器应用程序)和s130(对于服务器和客户端应用程序)。 要了解SDK版本和软设备的兼容性 ,有一个兼容性列表 。 可以看出,版本12.3.0以上的SDK适用于我们的主板。 但是我们将停止使用SDK 10.0.0,因为 它支持s110和s130。


配置OpenOCD


在SDK的示例和文章中,nrfjprog实用程序通过JLink用于固件,我们需要通过ST-Link V2进行刷新。 相反,我们将使用很酷的OpenOCD程序( 可从Windows下载) 。 它允许您刷新和调试 Tuevu huchu 大量不同的电路板和微电路。 nrf51芯片有一个配置 。 要强制OpenOCD刷新我们的电路板,您需要执行以下所示格式的命令(将OpenOCD / bin文件夹添加到Path之后)。 您可以在文档中阅读有关OpenOCD命令的更多信息。


openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "nrf51 mass_erase 0" -c "flash write_image <PATH_TO_HEX> <OFFSET>" ^ -c reset -c exit 

像往常一样,魔鬼出现在细节中:


  • “重置暂停”发送芯片重置命令并停止设备。 在这种状态下,可以擦除/写入固件
  • “ nrf51 mass_erase 0”允许写入引导加载程序部分,并擦除微电路的整个可编程存储器(在某些情况下,这将有助于避免固件下载错误)
  • 代替<PATH_TO_HEX>,您需要替换十六进制文件的路径
  • <OFFSET>设置固件写地址的偏移量。 如果要与软件设备分开刷新固件,则此参数很有用。 如果要从内存的开头(从地址0x0开始)写入固件,则可以放弃此参数
  • 重置重置芯片以使其与新固件一起使用

SDK包含用于软设备的十六进制文件。 要在板上填充s130,可以使用以下命令序列:


 set file=<nRF5_SDK>/components/softdevice/s130/hex/s130_nrf51_1.0.0_softdevice.hex openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "nrf51 mass_erase 0" -c "flash write_image %file%" -c reset -c exit 

然后,您可以上传我们的固件。 删除“ nrf51 mass_erase 0”很重要,这样软设备就不会擦除。 并且不要忘记偏移量。 对于s130,偏移量为0x1c000,对于s110,偏移量为0x18000。 这些值可以在s130s110的规格中找到。


 set file=<PATH_TO_HEX> openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "flash write_image %file% 0x1c000" -c reset -c exit 

现在,在程序存储器中,nrf51822应该位于软件设备固件以及我们的固件中。 对于测试,我使用了<nRF5_SDK> / examples / ble_peripheral / ble_app_beacon文件夹中的示例以及一个名为“ nRF Connect”的Android应用程序。 执行完命令后,我开始看到称为nRF的设备。 这就是我们想要的。


设置一个CLion项目


nrf51 SDK包含基于Makefile的示例。 要使用CLion,必须使用CMake文件描述项目程序集。 Googling显示nrf51CMake项目已经在github上了。 它是为与SDK 12.XX一起使用而编写的,因此,我们的SDK 10.0.0的某些文件路径被证明是不正确的。 此外,项目中还使用了nrfjprog实用程序。 因此,我不得不修改项目设置并使用OpenOCD重写固件目标。 我的工作结果可以在github上找到。 自述文件介绍了在CLion中设置项目和调试的说明。


聚苯乙烯


与nrf51822的功能有关的许多技术细节都无法说明。 我希望有一天我可以通过添加文章或撰写新文章来填补空白。

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


All Articles