ethcat开发记录 二
SOEM移植到stm32f407+LAN8720硬件上的注意点
1、LAN8720的PHY地址问题。
2、LAN8720芯片在上电后要对复位引脚操作。
3、使能LAN8720的混杂模式,在新的HAL库里,这个设置包含在 ETH_MACFilterConfigTypeDef 结构体里,通过 HAL_ETH_SetMACFilterConfig函数配置。
完整代码:
/* ETH init function */
void MX_ETH_Init(void)
{ /* USER CODE BEGIN ETH_Init 0 */
//复位芯片
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
/* USER CODE END ETH_Init 0 */ static uint8_t MACAddr[6]; /* USER CODE BEGIN ETH_Init 1 */ /* USER CODE END ETH_Init 1 */
heth.Instance = ETH;
MACAddr[0] = 0x00;
MACAddr[1] = 0x80;
MACAddr[2] = 0xE1;
MACAddr[3] = 0x00;
MACAddr[4] = 0x00;
MACAddr[5] = 0x00;
heth.Init.MACAddr = &MACAddr[0];
heth.Init.MediaInterface = HAL_ETH_RMII_MODE;
heth.Init.TxDesc = DMATxDscrTab;
heth.Init.RxDesc = DMARxDscrTab;
heth.Init.RxBuffLen = 1524; /* USER CODE BEGIN MACADDRESS */ /* USER CODE END MACADDRESS */ if (HAL_ETH_Init(&heth) != HAL_OK)
{
Error_Handler();
} memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig));
TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT;
/* USER CODE BEGIN ETH_Init 2 */
ETH_MACFilterConfigTypeDef pFilterConfig;
HAL_ETH_GetMACFilterConfig(&heth, &pFilterConfig);
pFilterConfig.PromiscuousMode=ENABLE;//使能混杂模式
HAL_ETH_SetMACFilterConfig(&heth, &pFilterConfig); HAL_ETH_SetMDIOClockRange(&heth); //判断lan8720芯片是否连接
uint32_t regvalue;
if(HAL_ETH_ReadPHYRegister(&heth, PHY_ADDR, PHY_SPECIAL_MODES_REG, ®value) != HAL_OK)
{
/* Can't read from this device address continue with next address */
return;
} // if((regvalue & PHY_BASIC_STATUS_REG) == PHY_ADDR)
// {
// LOG_D("Found a phy, address:0x%02X", PHY_ADDR);
// }
//软复位
if(HAL_ETH_WritePHYRegister(&heth, PHY_ADDR, PHY_BCR, PHY_RESET) == HAL_OK)
{
HAL_ETH_ReadPHYRegister(&heth, PHY_ADDR, PHY_SPECIAL_MODES_REG, ®value); uint32_t tickstart = HAL_GetTick(); /* wait until software reset is done or timeout occured */
while(regvalue & PHY_RESET)
{
if((HAL_GetTick() - tickstart) <= 500)
{
if(HAL_ETH_ReadPHYRegister(&heth, PHY_ADDR, PHY_BCR, ®value) != HAL_OK)
{
return;
}
}
}
} //读lan8720工作模式,设置mac模块
if(HAL_ETH_ReadPHYRegister(&heth, PHY_ADDR, PHY_BCR, ®value) == HAL_OK)
{
regvalue |= PHY_FULLDUPLEX_100M;
HAL_ETH_WritePHYRegister(&heth, PHY_ADDR, PHY_BCR, regvalue); //eth_device_linkchange(&stm32_eth_device.parent, RT_TRUE);
ETH_MACConfigTypeDef macconfig;
HAL_ETH_GetMACConfig(&heth, &macconfig);
macconfig.DuplexMode = ETH_FULLDUPLEX_MODE;
macconfig.Speed = ETH_SPEED_100M;
HAL_ETH_SetMACConfig(&heth, &macconfig); }
// else
// {
// status = RT_ERROR;
// } //以太网模块开始工作
HAL_ETH_Start(&heth); /* USER CODE END ETH_Init 2 */ }
4、底层数据读写函数
//读写以太网数据的函数,被soem的nicdrv.c中的函数调用
int EthWrPacket(uint8_t* pBuff, int Len)
{
uint32_t curidx=heth.TxDescList.CurTxDesc;
HAL_StatusTypeDef HalStatus;
TxBuffer.buffer=pBuff;
TxBuffer.len=Len;
TxConfig.TxBuffer=&TxBuffer;
TxConfig.Length=Len;
HalStatus = HAL_ETH_Transmit(&heth,&TxConfig,100);
if (HalStatus == HAL_OK) return Len; // return the number of bytes readelse return -1; // no packet received
} int EthRdPacket(void* pBuff)
{
HAL_StatusTypeDef HalStatus;
HalStatus=HAL_ETH_ReadData(&heth,&pBuff);
if (HalStatus == HAL_OK) return 1;else return -1;
}
测试方法:调用 EthWrPacket 函数,发送任意数据,连接开发板与电脑,使用wireshark监视网络,可以收到开发板的数据。
ethcat开发记录 二的更多相关文章
- Dokuwiki 二次开发记录
Dokuwiki 二次开发记录 [转]http://www.syyong.com/other/Dokuwiki-Secondary-Development-Record.html DokuWiki 是 ...
- SQL开发技巧(二)
本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列文章基于SQLServer系列,且版本为SQLServer2005及以上-- 文章系列目录 SQL开发技巧(一) SQL开 ...
- CozyRSS开发记录9-快速实现一个RSS解析器
CozyRSS开发记录9-快速实现一个RSS解析器 1.再读RSS标准 既然需要自己实现一个RSS解析器,那自然需要仔细的读一读RSS的标准文档.在网上随便找了两份,一份英文一份中文: http:// ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章
上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据. 目录: ASP.N ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表
显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据 目录 ASP.N ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章
上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...
- Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二)
http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2339490.html MS CRM 2011的自定义和开发(11)——插件(plugin ...
- SQL开发技巧(二) 【转】感觉他写的很好
本文转自: http://www.cnblogs.com/marvin/p/DevelopSQLSkill_2.html 本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列 ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(五)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(五) 2.1.3 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只 ...
随机推荐
- 第七章用Python实现对Excel文件中的数据进行md5加密
文章目录 获取数据 加密函数 数据加密 结尾 源码地址 本文可以学习到以下内容: 使用 pandas 中的 to_excel 生成 excel 数据 使用 pandas 中的 read_excel 读 ...
- springboot外部部署官方文档说明复制版
官方文档地址为: https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/#boot-features-e ...
- JSR 133
JSR 133是Java语言规范的一个JSR(Java Specification Request),全称为Java Memory Model and Thread Specification R ...
- ES实战-桶查询
目的 研究聚合查询的BUCKETS桶·到底是如何计算? PS:es版本为7.8.1 Bucket概念 关于es聚合查询,官方介绍,可以参考 es聚合查询-bucket. 有道翻译: 桶聚合不像指标聚合 ...
- 是时候开始写总结了-今日总结-vue单页面制作
今天哥给了我一个页面,让做出类似的. <h2>就直接说下页面用到的知识点吧</h2> 首先说下该页面使用的是vue2+less 直接写 导入模块时就只导入了cnpm i l ...
- Day23:个人小结的撰写&&对coderunner的熟悉
今日完成的任务: 1.完成个人小结的撰写 2.阅读Moodle文档,了解Moodle平台以及Moodle出题格式 明日计划: 1.撰写总报告中的结论 2.将插件安装完成 每日小结: 为了研究题库,特 ...
- MaaS模型即服务
chatgpt的API开放让我看到了科研和产业结合的一种方式, 最新的科研成果也能飞入百姓家了. 也看到了MaaS的未来,估计要出现一批提供在线模型的新创公司了.
- 压缩打包,tar
压缩打包命令 创建压缩包 tar -zcvf /home/xxxx.tar.gz /xahot 解压 tar -zxvf xxx.tar.gz gzip xxxx 自动变为 xxx.gz
- Fortran笔记之过程重载,多态,泛型编程
参考自Introduction to Modern Fortran for the Earth System Sciences 过程重载 OOP中的另一个重要技术是过程重载(Procedure Ove ...
- js右键生成菜单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...