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 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只 ...
随机推荐
- 前端代码的js里面的内容被打包后都会以某种规则全部存在dist文件夹的js文件夹的app.xxx.js里面
- go 标准输入输出
使用 bufio 处理带有空格分隔的不定长字符串 func main() { scanner := bufio.NewScanner(os.Stdin) for i := 0; i < 2; i ...
- java中带回调函数的字符串替换,类似js中的replace(rgExp,function)
https://blog.csdn.net/weixin_33834075/article/details/91599852 import java.util.regex.Matcher; impor ...
- MySQL中的sql优化
目标: 掌握SQL调优的原则 掌握SQL调优的基本逻辑 掌握优秀SQL的编写方案 掌握何为慢SQL以及检测方案 SQL优化原则 1.减少数据量(表中数据太多可以分表,例如超过500万数据 双11一个 ...
- 在Mac的哪里可以找到bashrc文件
- 虚拟机中Linux分区扩容
打开Virtualbox所在的安装目录,执行以下命令,命令中的虚拟有磁盘路径改成自己的: 调整容量前,先关闭虚拟机.接着,打开CMD,进入VirtualBox的安装目录,执行VBoxManage li ...
- Android组件化开发-----页面路由(ARouter)
平时开发中,我们经常用到页面跳转功能.之前我一直使用Intent过跳转 Intent intent = new Intent(A.this, B.class); intent.putExtra(&qu ...
- Windows支持多个远程连接
1.点击 开始-->运行-->输入"gpedit.msc",进入本地组策略编辑器 2.点击 计算机配置-->管理模板-->Windows组件-->远程 ...
- error NU1301: Failed to retrieve information about 'volo.abp.cli' from remote source 'https://www.myget.org/feed/Packages/aspnetcoremodules/FindPackagesById()?id='volo.abp.cli'&semVerLevel=2.0.0'.
today i come across an error when install the abp from the command line after refer to https://githu ...
- Posggresql插件Multicorn安装问题总结
根据官网https://multicorn.readthedocs.io/en/latest/installation.html的安装指南下载安装,关键信息: Postgresql 9.1+ Post ...