lwIP

204-基于Xilinx Virtex-6 XC6VLX240T 和TI DSP TMS320C6678的信号处理板

回眸只為那壹抹淺笑 提交于 2020-04-24 14:18:35
基于Xilinx Virtex-6 XC6VLX240T 和TI DSP TMS320C6678的信号处理板  1 、板卡概述   板卡由我公司自主研发,基于VPX架构,主体芯片为两片 TI DSP TMS320C6678,两片Virtex-6 XC6VLX240T-ff1156 FPGA,1个RapidIO Switch。FPGA连接FMC子卡。FPGA片外挂接2簇32bit DDRIII SDRAM, 大容量支持2GB。每片FPGA还通过EMIF总线连接一片TMS320C6678型8核心DSP。所有信号处理FPGA与DSP均通过SRIO 4X连接板上一片8端口SRIO 4X交换芯片。DSP芯片外挂 大容量支持2GB的DDRIII SDRAM。两片DSP之间通过HyperLink进行高速直接互联。两片FPGA之间通过8X GTX以及若干LVDS信号互联。 可用于软件无线电系统,基带信号处理,无线仿真平台,高速图像采集、处理等。支持热插拔,设计芯片可以满足工业级要求。   2 、处理板技术指标 SRIO 4X交换网络连接两片DSP以及两片Virtex-6 FPGA SRIO 4X交换网络连接4组SRIO 4X至VPX P1; 具备一个SRIO 4X交换芯片; 具备高速RocketIO数据传输链路; 具备I2C接口,实现系统功耗、状态管理; 可以接入VPX P0参考时钟进行工作;

LWIP UDP 协议分析

不打扰是莪最后的温柔 提交于 2020-03-30 16:45:39
一、udp.c实现的函数 1、void udp_input (struct pbuf *p, struct netif *inp) 说明:处理接收到的udp数据包。 参数:p数据包缓存区;inp网络接口。 2、err_t udp_send (struct udp_pcb *pcb, struct pbuf *p) 说明:发送udp包。这个函数直接调用udp_sendto()函数。 参数:pcb协议控制块;p数据包发送缓存区。 返回:ERR_OK发送成功;ERR_MEM发送溢出;ERR_RTE不能发送到指定ip;其它表示发送失败。 3、err_t udp_sendto (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port) 说明:发送udp包到指定ip地址。 参数:pcb协议控制块;p数据包发送缓存区;dst_ip目的ip地址;dst_port目的端口号。 4、err_t udp_sendto_if (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port, struct netif *netif) 说明:按照指定的网络接口和ip地址发送udp包。 参数:pcb协议控制块;p数据包发送缓存区

LwIP的udp学习笔记

£可爱£侵袭症+ 提交于 2020-03-30 16:00:36
* Bind an UDP PCB. * * @param pcb UDP PCB to be bound with a local address ipaddr and port. * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to * bind to all local interfaces. * @param port local UDP port to bind with. Use 0 to automatically bind * to a random port between UDP_LOCAL_PORT_RANGE_START and * UDP_LOCAL_PORT_RANGE_END. * * ipaddr & port are expected to be in the same byte order as in the pcb. * * @return lwIP error code. * - ERR_OK. Successful. No error occured. * - ERR_USE. The specified ipaddr and port are already bound to by * another UDP PCB. * * @see udp

LWIP_ARP协议(1缓存表数据结构)

橙三吉。 提交于 2020-03-12 11:53:31
前言 从前面的文章,我们知道,ARP协议的核心是ARP缓存表,而ARP协议的实质就是对缓存表项(entry)的建立、更新、查询等操作。 那么,LwIP中是是怎么实现ARP协议的呢? ARP缓存表的数据结构 LwIP使用一个arp_table数组描述ARP缓存表,数组的内容是表项的内容,每个表项都必须记录一对IP地址与MAC地址的映射关系,此外还有一些基本的信息,如表项的状态、生命周期(生存时间)以及对应网卡的基本信息,LwIP使用一个etharp_entry结构体对表项进行描述。 而且LwIP预先定义了缓存表的大小,ARP_TABLE_SIZE默认为10,也就是最大能存放10个表项,由于这个表很小,LwIP对表的操作直接采用遍历方式,遍历每个表项并且更改其中的内容。 static struct etharp_entry arp_table [ ARP_TABLE_SIZE ] ; struct etharp_q_entry { struct etharp_q_entry * next ; struct pbuf * p ; } ; struct etharp_entry { # if ARP_QUEUEING /** 指向此ARP表项上挂起的数据包队列的指针. */ struct etharp_q_entry * q ; # else /* ARP_QUEUEING */ /**

我的编程之旅

对着背影说爱祢 提交于 2020-03-09 11:27:35
新冠疫情让笔者不禁回忆起10多年前甲流流行的那段过往。也就是那时,在封闭的大学宿舍里,笔者开启了自己的编程之旅。 初学汇编 初涉编程时那个C语言展示hello world的黑框并没有激起笔者的任何兴趣。为什么寥寥几句就可在屏幕上展示输出成为萦绕笔者心头的一个疑问。在全校封闭、无法组团dota、百无聊赖的境遇下,笔者开始着手去探索这一谜题。在学校书店入手了王爽编写的<<汇编语言>> 读完并实践之后,揭开了计算机原理的冰山一角,从此一发不可收拾的爱上编程,尤其享受那种努力探索后恍然大悟的快感! 紧接着,开始汇编的第二本书: 使笔者学到了win32汇编的各种知识,意识到汇编的强大和其直接操纵底层的犀利。 再学C语言 在实际编写汇编时,深感其表现力方面的不便,例如一个浮点操作就需要专门的指令。于是又老老实实滚回去修炼C语言,入手了基本经典的书籍进行学习: 这次修炼毫无障碍,对于汇编的学习让笔者不知不觉突破了指针这个大关。当然与C语言配套的必须还有数据结构和算法: 操作系统入门 学完C语言后,也到了大学里教授操作系统课的时候,课上用的教材是<<操作系统-
精髓与设计原理>>,同时笔者自己也搞了本<<现代操作系统>>研读。 学完上述两本后,心中涌起了造轮子的欲望,于是入手了下面这本: 书中事无巨细的讲解让笔者一步一步从保护模式到进程实现再到键盘输入等完成了一个简单的toyos

STM32+IAP方案 实现网络升级应用固件

时光毁灭记忆、已成空白 提交于 2020-02-28 05:10:57
关注了这个概念有些日子了,这段时间总算有机会实战==网络升级应用固件,这里记录下遇到的问题,及解决方案。 原理与网上流传的串口作为传输手段 一致;不同之处,无非我这里使用了网络设备传输。==(lwip)TFTP客户端的应用. 参考: IAR环境下STM32+IAP方案的实现 STM32浅谈之IAP.pdf 基于IAP和Keil MDK的远程升级设计 keil MDK中如何生成*.bin格式的文件 概况: 什么是IAP,为什么要IAP 可实现的原理 实现过程 细节及实现 以上基本都可以从【IAR环境下STM32+IAP方案的实现】中找到答案。这里只是贴图,醒目: IAP框架布局: STM32F103ZET6的启动方式有三种:内置FLASH启动、内置SRAM启动、系统存储器ROM启动,通过BOOT0和BOOT1引脚的设置可以选择从哪中方式启动,这里选择内置的FLASH启动。其FLASH的地址为0x08000000—0x0807ffff,共512KB,这些都能从芯片数据手册中直接得到。而这里首要的一个问题是中断的问题。正常情况下发生中断的过程为:发生中断(中断请求),到中断向量表查找中断函数入口地址,跳转到中断函数,执行中断函数,中断返回。也就是说在STM32的内置的Flash中有一个中断向量表来存放各个中断服务函数的入口地址,内置Flash的分配情况大致如下图2-1。

LWIP

那年仲夏 提交于 2020-02-16 21:06:38
https://blog.csdn.net/sealyao/article/details/5838632 TCP的核心算法在lwip中的实现 http://blog.sina.com.cn/s/blog_72d911930102wmmb.html LWIP完全剖析详解之core/tcp.c 来源: https://www.cnblogs.com/keepdoing123/p/12318696.html

STM32 Makefile的一次bug解决过程

拥有回忆 提交于 2020-02-12 01:29:26
背景 迁移华为的liteOS到STM32F4的开发板上,按照官方的步骤修改makefile后报错: arm-none-eabi-gcc.exe: warning: '-x assembler-with-cpp' after last input file has no effect arm-none-eabi-gcc.exe: fatal error: no input files compilation terminated. 解决过程 根据Makefile的报错地点可以看出是在对.S文件的编译过程中找不到文件所致,将结果打印出来: arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -DUSE_STDPERIPH_DRIVER -DSTM32F407xx -DSTM32F40_41xxx -I./Inc -IProjectDrivers/Inc -IProjectDrivers/Inc/Inc -IProjectDrivers/Inc/CORE -IDrivers/CMSIS/include -I./Src/SYSTEM -I./Src/MALLOC -I./ProjectDrivers/HARDWARE

STM32H7 LwIP 主RAM选择 DTCM AXIRAM UDP 收发问题

倖福魔咒の 提交于 2020-01-29 04:49:48
STM32H7 LwIP 主RAM选择 DTCM AXIRAM UDP 这段时间一直在调试STM32H743,期间掉进了不少坑,最大的坑还是网络这一块,例如LwIP移植,已经有前人踩过的坑,我以为我能避免,结果自己还是踩了,耽误了不少时间。 本人以前只用过M4的芯片,有标准库,习惯了所有工程自己建,库文件自己移植,文件目录按自己的风格走,所以非常不习惯CubeMX导出来的目录结构,H7木有标准库,只能HAL库走起来。 CubeMX是个好东西,但是封装的太抽象,有时候并不是一件好事,遇到问题怼寄存器的时候,就会很有体会,另外,中断处理的过程,都封装完了,你只是重写了应用部分,新手有可能都不知道需要清除中断标志位。 回到主题,LwIP移植就不多说了,应该算是比较好搜索教程了,不知道大家有没有注意到在CubeMX中配置的时候有这么一句话“ The ETH can work only RAM is pointing at 0x24000000 ” ,今天的问题就在这里了,下边是截图。 你如果搜索H7 LwIP移植教程,大概率能搜到的是 这个帖子 ,里边有一点提示和今天要记录的问题相关,如下图,我已经用红框框起来了,当然这个帖子是非常好的。 你这样配置,它一点问题都没有,可以正常运行,UDP一定能收能发,TCP我没有测试,想必也不会有任何问题的。 那么问题来了,DTCM,闲着了,在整个芯片里

TCP协议随笔

走远了吗. 提交于 2020-01-28 11:31:05
相关知识点记录: listen中blog参数介绍 listen_blog介绍 /* limit the "backlog" parameter to fit in an u8_t */ backlog = LWIP_MIN ( LWIP_MAX ( backlog , 0 ) , 0xff ) ; err = netconn_listen_with_backlog ( sock -> conn , ( u8_t ) backlog ) ; 1、其backlog是一个建议值,用于指定内部的队列大小,以控制同时建立的连接请求数量。 2、针对控制连接这个需求,有两种方法实现这个backlog: (1)单一队列来控制连接。队列中既包含了SYN_RCVD的状态,也包含了ESTABLISHED状态。accept只处理后面一种状态。如果三次握手中的ACK到来,则会在队列中直接改其状态。显然,这时backlog为这一队列的长度。 (2)两个单独队列来控制。两种状态分别实现单独的队列。显然这种情况下,两个队列都必须有明确的大小限制,backlog只能限制其中一个。 tcpip协议栈相关知识链接: lwip socket探秘之listen lwip socket探秘之bind lwip socket探秘之socket创建 lwip socket探秘之accept lwip socket探秘之recv