Questions tagged «freertos»

6
串行协议定界/同步技术
由于异步串行通信甚至在当今的电子设备中也很普遍,我相信我们许多人会不时遇到这样的问题。考虑与串行线(RS-232或类似产品)连接并且需要连续交换信息的电子设备D和计算机。即每个发送一个命令帧,并每个发送一个状态报告/遥测帧答复(报告可以作为对请求的响应发送,也可以独立发送-在这里并不重要)。通信帧可以包含任何任意二进制数据。假设通信帧是固定长度的分组。PCPCX msDY ms 问题: 由于协议是连续的,因此接收方可能会失去同步,或者只是在进行中的发送帧中间“加入”,因此它只是不知道帧起始位置(SOF)在哪里。根据数据相对于SOF的位置,数据具有不同的含义,接收到的数据可能会永久损坏。 所需的解决方案 可靠的定界/同步方案可在恢复时间短的情况下检测SOF(即重新同步所需的时间不超过1帧)。 我了解(并使用了一些)的现有技术: 1)标头/校验和 -SOF作为预定义的字节值。帧末的校验和。 优点:简单。 缺点:不可靠。恢复时间未知。 2)字节填充: 优点:可靠,快速恢复,可与任何硬件一起使用 缺点:不适用于固定大小的基于帧的通信 3)第9位标记 -在每个字节之前附加一个位,而SOF标记为1和数据字节标记为0: 优点:可靠,快速恢复 缺点:需要硬件支持。大多数PC硬件和软件未直接支持。 4)第8位标记 -上面的一种模拟,同时使用第8位而不是第9位,每个数据字仅保留7位。 优点:可靠,快速的恢复,可与任何硬件一起使用。 缺点:需要从/到常规8位表示到/从7位表示的编码/解码方案。有点浪费。 5)基于超时 -假定SOF为某个已定义的空闲时间之后的第一个字节。 优点:无数据开销,简单。 缺点:不太可靠。在较差的计时系统(如Windows PC)上无法很好地工作。潜在的吞吐量开销。 问题: 还有哪些其他可能的技术/解决方案可以解决该问题?您能否指出上面列出的缺点,可以轻松解决这些缺点,从而消除它们?您(或您将)如何设计系统协议?
24 serial  communication  protocol  brushless-dc-motor  hall-effect  hdd  scr  flipflop  state-machines  pic  c  uart  gps  arduino  gsm  microcontroller  can  resonance  memory  microprocessor  verilog  modelsim  transistors  relay  voltage-regulator  switch-mode-power-supply  resistance  bluetooth  emc  fcc  microcontroller  atmel  flash  microcontroller  pic  c  stm32  interrupts  freertos  oscilloscope  arduino  esp8266  pcb-assembly  microcontroller  uart  level  arduino  transistors  amplifier  audio  transistors  diodes  spice  ltspice  schmitt-trigger  voltage  digital-logic  microprocessor  clock-speed  overclocking  filter  passive-networks  arduino  mosfet  control  12v  switching  temperature  light  luminous-flux  photometry  circuit-analysis  integrated-circuit  memory  pwm  simulation  behavioral-source  usb  serial  rs232  converter  diy  energia  diodes  7segmentdisplay  keypad  pcb-design  schematics  fuses  fuse-holders  radio  transmitter  power-supply  voltage  multimeter  tools  control  servo  avr  adc  uc3  identification  wire  port  not-gate  dc-motor  microcontroller  c  spi  voltage-regulator  microcontroller  sensor  c  i2c  conversion  microcontroller  low-battery  arduino  resistors  voltage-divider  lipo  pic  microchip  gpio  remappable-pins  peripheral-pin-select  soldering  flux  cleaning  sampling  filter  noise  computers  interference  power-supply  switch-mode-power-supply  efficiency  lm78xx 

2
STM32F407 + LAN8720A + lwIP + FreeRTOS =未收到以太网帧
我正在尝试使用STM32F407和LAN8720A以太网PHY的PCB,尽管接收帧没有问题,但我似乎无法接收到任何以太网帧。 硬件设定 我在STM32F4上有一个25 MHz的晶体,将25 MHz的时钟输出引脚驱动到处于REF_CLK_OUT模式的LAN8720A中,并将50 MHz的时钟驱动回STM32F4,作为RMII接口的一部分。 插孔/磁铁是通用部分。这是数据表: 软件 我正在使用最新的STM32CubeMX为STM32项目生成系统工作台,其中包含FreeRTOS,lwIP和ETH外围设备驱动程序。我还没有真正接触过任何生成的代码,因此lwIP堆栈在FreeRTOS堆栈内进行了初始化。 实验 在将主板的lwIP配置为10.0.0.2静态IP并将计算机上的USB到以太网加密狗配置为10.0.0.1静态IP的情况下,我使用以太网电缆直接连接了两个设备,并且主板尝试连接到计算机端口80上的服务。我使用Wireshark(在计算机上运行并绑定到USB到以太网转换器)捕获了主板和计算机之间的交互。 由于没有收到帧的问题,我们永远也不会 错过ARP的东西: 如您所见,Stmicroe(我的主板)可以发送ARP数据包(计算机可以听到),但是似乎从未听到过计算机的响应,因为它不断爆破ARP数据包。 这两个设备都配置有255.255.255.0掩码,并且都配置有10.0.0.1(计算机)的网关地址。我听说过ARP表被搞砸了,并且计算机忽略了ARP数据包,但是我无法想象该板将忽略我的计算机专门针对它的ARP数据包-响应板首先提出的要求。 因此,我深入研究了lwIP的ethernetif.c文件,并注意到该HAL_ETH_GetReceivedFrame_IT(&heth)错误返回了错误。该函数返回错误,因为(heth->RxDesc->Status & ETH_DMARXDESC_OWN)== 0,而不是1。我的意思是说DMA缓冲区当前为MAC外设设防,还没有收到任何东西。 此外,我已经验证了HAL_ETH_IRQHandler不会被调用。 PHY有问题吗? 在这一点上,我怀疑我的PHY本身应该受到指责。 为了进一步调查,我将Saleae Logic Pro 16连接到所有相关信号,并注意到TX0 / TX1和RX0 / RX1线路上都有大量流量。这是使用25 MHz输入时钟的一些RX流量的捕获: 除非我试图捕获50 MHz的时钟输出,否则RX_ERR始终处于低电平状态(这对Saleae这样的设备来说显然是具有挑战性的):在这种情况下,RX_ERR偶尔会被高电平地擦除几个数据包(这实际上是一个好兆头) —插针似乎在起作用)。 下一步 我尝试通过在任务中调用HAL_NVIC_EnableIRQ(ETH_IRQn);after tcpip_init()被调用来手动启用ETH中断MX_LWIP_Init(),但这似乎无法解决问题。我不能完全确定以太网中断例程是否应该被调用 -这是提出全新设计的挑战。我正在努力确定系统的正确行为,因此可以确定我的设置有何不同。 虽然我以前使用过STM32 / STM32CubeMX / FreeRTOS,但我从未使用过STM32的以太网外设,而我对这种东西的唯一经验是在定制嵌入式Linux系统上,这似乎总是开箱即用。这对我来说是新领域! 我确定某个地方有一个愚蠢的复选框或Ethernet_EnableReceive()我忘记调用的神奇函数,但是我真的找不到任何建议显式启用该功能的文档,而我在互联网上看到的帖子都是由于不相关问题。 如果有人有任何想法,我希望获得帮助! 附录:摆脱FreeRTOS 为了消除问题,我删除了FreeRTOS项目组件,回到了裸机项目。在主循环中,我致电MX_LWIP_Process()。这种方法应该消除对中断的需求,但是不能解决问题。我仍然无法接收帧。这使我认为STM32CubeMX生成的ETH HAL代码中有某些内容。 解 以防万一将来有人偶然发现这个问题,该问题原来是由RXD0和RXD1引脚引起的。这就是为什么我可以在逻辑分析仪上看到流量的原因,但是我的MCU没有对它进行解码。 …

3
具有802.15.4 / 6LoWPAN堆栈的Cortex M4的RTOS
我正在评估要在物联网项目中使用的操作系统,但我不知道什么是最好的进行方法。 我正在使用带有32k RAM和CC2520 802.15.4收发器的TM4C123GH6PM MCU,如果系统已经提供了这些驱动程序,那就太好了。 系统将运行一个(交互式)任务,以绘制一个点矩阵屏幕并对用户输入做出反应。它将配置和应用程序数据存储在spi闪存上。将有一个包含多个模块的网格(基于802.15.4),以在模块之间同步数据,从模块中提取传感器数据并将其转发到网关(想到了rpl),并在八卦中分发OtA固件更新。喜欢时尚。所有这些同时也运行着一个内存消耗大的应用程序。 到目前为止,我已经研究了以下系统: RIOT: 优点 好的硬件抽象 占地面积小 非常活跃和乐于助人的社区 完整的802.15.4 / 6LoWPAN堆栈 缺点 不稳定,仍在发生根本变化 仍然包含比赛条件/崩溃 没有文件系统支持 少数网络协议 Contiki: 优点 成熟的系统,用于商业产品 具有许多有用协议的完整802.15.4 / 6LoWPAN堆栈 文件系统支持 cc2520支持 缺点 发展已过时 '成长'的代码库,很多烂 Tiva C口质量差 对现代平台的支持很少 非抢占式调度可能会导致应用程序出现问题 FreeRTOS: 优点 几乎没有其他复杂性 易于使用,可靠的调度程序 成熟的项目,用于许多产品 很多港口 缺点 没有文件系统 没有用于驱动程序的硬件抽象/没有硬件驱动程序 没有网络堆栈 动态内存使用率较高 NuttX: 优点 功能非常丰富,几乎感觉像Linux,但仍然很小 文件系统支持 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.