与定制轮胎配合使用Redd

上一篇文章中,我们开始熟悉如何使用Redd复合体处理标准的知名轮胎,此后,我答应继续学习如何使用其中的更多奇特轮胎。 但是,在与一些熟人交谈之后,我突然意识到,并不是每个人都阅读此周期之外有关Redd复合体的文章。 因此,并非所有人都知道为什么将这些轮胎添加到该综合设施中。 当然,您可以只参考该文章 ,但在我看来,参考此特定循环的主题来重述其相应部分会更正确。 因此,今天,我们将不仅考虑与Redd联合体出售的轮胎有关的实际问题,而且还要考虑理论问题。



无聊的理论部分


我们会考虑什么


让我们简要地(尽可能)遍历一些理论问题,以清楚地理解为什么一切都以Redd复杂方式以一种或另一种方式完成。 首先,复杂的主要任务...奇怪的是,作为本系列文章的一部分,我从未对此进行过撰写。 是的,我不打算写。 实际上,主要任务是联合远程访问以调试某些硬件(从微控制器到大型多核处理器系统)。 预留工作时间,通过平均闲暇(而不只是理想)和其他娱乐方式提供物理访问。 调试可以通过JTAG或开发环境提供的其他工具进行。 一个庞大的团队正在研究这个问题,那里的一切都很有趣,但是我不喜欢任何官僚机构,所以我不想写这些话题。 也许将来,其他人会填补这一空白。与此同时,我正在写有关该综合设施的辅助工具的文章。

是的,是的,我已经描述了六个多月的所有内容仅仅是为了帮助开发人员。


为什么在Redd复杂标准轮胎中实施


很多时候,您不得不自行开发设备而无法使用。 让我们来看一个具有漂亮链接的项目的特定示例。 例如,这是我最喜欢的直升机 。 我们在这里,直升机在瑞典。 此外,我们下令在冬季进行开发,那时直升机实际上无法执行我们为其执行的功能(即在森林中施肥:当时的土壤在雪堆里)。 事实证明,直升机中安装的设备必须在调试和飞行过程中进行虚拟仿真。

但这就是调试。 测试项目时,仿真是唯一的选择。 测试人员应以最大数量的模式检查所有内容,并通过各种组合进行分类。 此外,他必须创建具有紧急情况的紧急情况(例如对测试人员的破坏性工作)。 如何在真实设备上做? 仅在模拟器上。

与现代设备的通信进展如何? 通常-通过标准总线,因为设备开发人员倾向于通过消费者已经知道的东西进行连接。 那只是Redd,它将充当许多设备的仿真器。 它的总线连接到已开发的块。 而且,该部门将确保它能与真实的设备一起使用,而不是知道轮胎的另一端不是铁,而是Redd复合体,许多仿真器都在其上旋转。

在实际设备上工作时,轮胎可以充当分析仪,使用实际硬件进行记录,以在出现问题时分析飞行情况。

通常,应该有尽可能多的轮胎,并且其轮胎设置应尽可能变化。 虽然,您需要了解所有措施。 好吧,仅是因为每条总线要花费一些钱并占用机箱和连接器上的空间。 现在,让我们考虑最适合以编程方式控制这些总线的策略。

谁将领导Redd代码的开发


在现代公司中,His下的工时排在最前列。 事实是,从很多方面来看,这是一个非常昂贵的资源(金钱,开发时间,在此特定时刻可以聘请专家来完成公司的其他任务,等等),因此,如果管理层可以节省数小时,那就可以做到。 如果有可能不将开发人员添加到团队中,则不会添加他们。 如果可以在更短的时间内完成所有工作,他们将淘汰开发人员,以便他们可以在更短的时间内完成。

因此,他们不太可能让个别专家编写仿真器。 如果这样做,他们将是在同一家公司工作的普通程序员。

我为什么要写这个。 在某些文章中,当某些特殊语言用于维修非标准轮胎时,这被视为时尚。 我有机会处理这样的事情。 让我以曾经发表过的事例来描述我的印象。 例如,在这里https://www.astrosoft.ru/about/clients/bvg-group/case-959/ 。 而且,GOST语言最近甚至出现了。 我的观点是:在70年代末-80年代初是必需的,然后在二十一世纪第一季度末绝对不需要。 这是Konstantin Chizhov的精彩文章,其中该语言(联系小组)中最重要的事情是通过C ++元编程实现的,完全免费,几乎是免费的。 si.html 。 本文检查AVR的所有内容。 我对Cortex M的库选项进行了很好的检查,结果也很棒。 优化器打包所有内容,以使在汇编器中直接开发不会有任何收益。 这不仅适用于联系人组,而且通常适用于mcucpp的所有驱动程序。 遗憾的是,当局没有将这种意识形态纳入MAX RTOS,因此研究成果并未纳入出版物。 但是在家里我只使用这个库。

在YASTEK上实现的所有其他功能也都完美包装在C ++构造中。 但是在70年代和80年代交界处,操作员的交互性却不高。 没错,当时的Pascal,C和其他语言的编译器中没有。 大多数时候,编译器是批处理的,只是生成了汇编文本,而没有任何调试工具。 在进行YASTEC翻新时,我们添加了用于将数据输出到屏幕甚至是交互式调试器的运算符,但是无论如何,在现成的普通编程语言开发环境中发生的情况下,这些措施只是一半。 简而言之,由于技术原因,YASTEK的特殊语言已久。 如今,使用一种通用的编程语言,人们可以实现相同的目标,甚至更多。

也许有人会说不是C ++专家在那儿写代码,而是普通的定制器……就是这样,但是我已经注意到普通的程序员会为Redd编写代码。 管理层没有必要聘请狭窄的专家来执行偶尔的任务。 对于普通专家来说,学习另一种语言是没有意义的。

还有什么其他表现功能? 开发模拟器时,您可能需要完全陌生的东西。 例如,对于交互模式下的GPS仿真器,我们使用操纵杆进行控制。 哪种面向问题的语言支持它? 这些语言的灵活性仍然存在。 最后,在讨论中的YESTEK中代码的重用还没有达到标准,而是在网络上寻找现成的解决方案...即使使用通用语言,它也不只是一个很好的例子,而且也是一个奇特的例子。

同样的情况适用于这种情况 。 在企业自动化的框架中,SIMATIC凭借其先进的组态和编程系统是不错的选择,但是对于一个小型项目,它所产生的问题多于解决的问题,因此被更通用的解决方案取代。

总的来说,我们得出结论,对于Redd,普通程序员以其常用语言进行的工作是正常的。 对于其他任务-进行了讨论,尤其是针对Redd复合体解决的辅助任务,这很正常。


如何实施轮胎


但是,如果我们说普通程序员将以其常用语言使用轮胎,那么用于处理这些总线的库应尽可能地典型。 特别是,这句话立即被指出:“然后将微控制器放入复杂的系统中,程序员将在其上编写所有内容。” 此选项再次需要这些控制器中的专家。 另外,它要求子系统之间进行严格的同步。 决定,如果可能的话,程序员应该在熟悉的PC中央处理器上工作。 “但是FPGA呢?”您问。 好吧,哎呀,大概每个人都注意到,对于FPGA,我选择了“最小的Verilog开发,程序员最熟悉的思想”。 在那里,您做不到任何方便。 但是我们正在努力。

因此,典型的轮胎实施方案。 使用UART,一切都变得清晰了。 使用SPI / I 2 C时,考虑了各种选择,因为没有针对PC的既定事实标准。 但是有一种愿望,那就是不要编写一套完整的选项:控制器,驱动程序和库的“固件”。 我想准备点东西。 尽管如此,直到最后我们还是考虑了在USB级别实现的赛普拉斯单点调试器的微控制器选项。 这篇文章中有关DMA的发现指出了这一点。 如果所有以前未知数据流的总线同时工作,则无法保证TOR中要求的带宽。 如果分布在多个控制器上,我们将依靠USB 2.0 FS的带宽。 因此,只有FTDI桥。 一桥即一功能,USB 2.0 HS提供带宽。

顺便说一句,在上一节中,我总是提到通用的C ++语言。 事实是,在我人生的这个阶段,这是我的主要编程语言(尽管并非总是如此)。 但是标准解决方案是标准解决方案,可以完美地与当今其他通用语言(Python,Java或其他某种语言)一起工作。 因此,如果使用这些语言的专家参加战斗,他将使用这些语言来完成所有工作。 这就是通用解决方案的美。

但是,有些轮胎很笨拙,无法铺设昂贵的FTDI芯片。 我们将讨论如何在综合大楼中实施它们。

一千个小东西


为什么Redd综合大楼的SD卡已切换


许多正在开发的设备正在使用SD卡更新其“固件”。 通常,“固件”以文件形式倒入卡中,然后关闭设备,然后在打开时检测到更新文件并应用更新文件。 我最近涉猎了一块3D打印机的新板。 在那里,经过一些M命令(我不记得确切的代码)之后,Marlin 2.0的“固件”通过USB总线打开了SD的内容,因此我可以轻松地注入更新。 我通过USB连接,然后我知道我已经关闭/打开电源(如何在Redd complex的帮助下进行操作,我们在上一篇文章中进行了介绍 ),给出了将SD卡连接到USB的命令,等待磁盘出现,填充“固件”,再次关闭/打开电源,然后等待。 固件已更新。 但是,并非一切都如此美丽。 有时需要事先准备SD卡。 顺便说一句,如果将“固件”曲线添加到3D打印机,上述理想选项也将不起作用,并且还必须提前准备卡。 在开发时,请制作一个无效的“固件”-几个琐事。

对于这种情况,Redd复合系统具有交换的SD卡。 在电路图上,它包括以下内容:



首先,我们试图找到一种典型的解决方案,该解决方案允许通过FPGA切换SDIO总线(不是SPI,即SDIO,设备也可以通过此接口工作)。 事实证明,不存在一个完美的解决方案。 甚至FPGA制造商的解决方案也很复杂,而且也不是很可靠。 因此,提供了模拟键,作为Redd的一部分将卡物理连接到外部连接器或读取器。 因此,操作算法如下:连接到阅读器,使用Linux OS准备文件,连接到目标设备。 我们在那里使用。

由于使用文件系统并不属于关键问题(我们只是在准备数据,因此不需要特殊的速度),因此决定基于STM32F103微控制器制造阅读器。 仅在此芯片的最高版本中支持完整的SDIO。 并且由于该控制器具有许多自由触点,因此决定在它们上执行其他低速功能。 考虑一下电路图的一部分,从中可以看到它们的列表。



实际上,与SDIO和SD卡切换相关的信号以红色突出显示。 我们继续考虑剩余的背光颜色。

SPI闪存驱动器


更新目标设备“固件”的第二种常用技术是使用SPI闪存驱动器。 如今,这已不再是SPI,而是Quad-SPI。 原理是一样的。 填充数据,然后将闪存驱动器连接到设备并打开它。 Bootstrap机制将在启动时将固件“吸入” RAM。

这里采用相同的方案-模拟开关:



好吧,与使用闪存驱动器相关的行以绿色突出显示。

低固态继电器


周期性地出现了模拟设备上的按钮按下的任务。 典型情况:测试人员需要检查目标设备菜单的操作。 不,一旦您可以解决所有问题,但是开发人员是否进行了更改? 为了使该过程自动化,最好是自动制作用于浏览菜单的按钮(可以通过目标设备上的OS或通过使用嗅探器扫描到显示器的总线来扫描屏幕截图)。 嗯,还有许多其他任务需要以编程方式模拟按钮按下。 为此,将固态继电器添加到电路中:



...,其控制线以蓝色突出显示。

配置USB-SPI / I 2 C桥


在上一篇文章中,我注意到在其上实现SPI和I 2 C总线的FTDI桥具有控制支脚CFG0和CFG1。 通常,很可能没有人需要更改其默认值(全为零),但如有必要,控制这些信号的行也会使STM32控制器成为问题,并以紫色突出显示。

USB设备重置


在系统开发过程中,决定从理论上讲,设备可以“冻结”。 例如,第一个系列的FTDI桥具有“冻结”和不稳定的“接地”特性。 是的,那是十年前的事了。 是的,在综合大楼内,地球非常稳定,因为桥梁与计算机位于同一建筑物内。 但是突然之间。 通常,在ToR中放置了重置任何设备的可能性。 相同的STM32控制器生成相应的请求,并以黄色突出显示。

以编程方式访问STM32控制器


如您所见,上述大多数设备都不是标准设备。 更准确地说,它们中的大多数都可以归类为GPIO,但实际上并没有标准。 设备中最难的部分是SD卡读卡器。 因此,决定在STM32控制器上实现SD读取器功能(幸运的是,STM Cube MX环境允许您通过编写几行自己的代码来实现此目的),并根据供应商对读取器底层的海量存储设备的请求来实现其余功能。 但是,正如几篇文章之前所决定的那样,庞大的叙述不方便阅读。 因此,下一次将讨论从Linux向大容量存储设备发送命令的原理以及对所得设备进行编程访问的示例。

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


All Articles