以下文章来源于:公_众_号开源电子网
读取更多技术文章,请扫码关注
芯片的英文手册需要全部看吗?
进入嵌入式行业的人都知道,必定和英文手册打交道的,例如使用一款PHY芯片设置电路,那么首要任务就是查找该PHY芯片的手册以及相关资料,这些资料呢,往往都是英文形式的,很少有中文的手册,对于英文不好的开发人员也是一种烦恼的技术活,一般手册主要包含了芯片描述,芯片引脚描述,通信电气属性,寄存器描述等等信息。问题来了,作为一名技术人员我们有必要把英文手册全部读完吗,显然不是的,我们一般查找重要的知识点,。
如果你作为一名硬件工程师,那么你的首要任务就是设置电路且并不涉及软件的问题,所以他不需要看相关寄存器描述等等信息。
如果你作为一名纯软件工程师,那么你就比硬件工程师比较深入一点了,前提你必须懂一点点的电路,不然原本是电路有问题,你自己猛调代码显然不行的,所以作为纯软件工程师必须要查看硬件工程师的设计的电路是否合理(看芯片引脚描述)才能调试代码。
硬件工程师职责一般分为三部(有些没有描述,请见谅,因为小编不是硬件工程师):
① 设计需求(客户或者老板的需求):例如使用STM32 + PHY芯片,那么它们连接的方式一般有两种,一种是MII,另一种是RMII接口。
网口由CPU、MAC和PHY三部分组成,对于上述的三部分,并不一定都是独立的芯片,根据组合形式,可分为下列几种类型:
CPU集成MAC与PHY(一般是10Mbsp);
CPU集成MAC,PHY采用独立芯片(一般是10/100Mbsp都可以);
CPU不集成MAC与PHY,MAC与PHY采用集成芯片;
② 制作原理图(使用AD等软件制作):根据PHY芯片手册以及STM32的ETH接口等制作原理图
③ 制作PCB:前两步已经阐述了,制作完成之后就是打样,提交给测试工程师或者如软件工程师调试。
硬件工程师对于芯片手册需要知道哪些信息:
-
芯片的引脚描述(pin description):
举个栗子:
上图红色框框部分:如果该芯片的1号引脚上拉(高电平)表示RMII模式,否则下拉(低电平)就是MII模式,这里就是根据设计需要修改,其他引脚也是一样,必须根据设计需求来修改电路。
-
芯片连接方式(大家在手册查找即可)
举个栗子:
MCU和PHY连接的方式有两种,一种MCU输出50Hz给PHY芯片,另一种是使用晶振提供PHY时钟。
3. 芯片封装设计(一般在最后一页讲到)
举个栗子:
硬件工程师肯定知道怎么做,这里我们就必须讲解。
软件工程师职责大概分为三部(这里小编只写大概的职责,还有很多):
① 原理图是否存在问题:因为我们不知道硬件工程师设计电路时候有些相关的引脚是否连接或者说忘记连接等等情况,这里必须有软件工程师发现问题,然后反馈给硬件工程师修改电路,如果存在电路问题,那么我们单单调试代码是不出来的(这里就是重点)。
② 编写代码,根据芯片手册编写相应的代码,我们一般看寄存器描述即可。
③ 测试是否成功。
软件工程师对于芯片手册需要知道哪些信息:
-
芯片的引脚描述(pin description):检测硬件工程师设计的电路是否正确。
-
芯片连接方式:检测硬件工程师设计的电路是否满足设计需求。
-
寄存器描述(Register Descriptions)
举个栗子:
上图不针对那款PHY芯片,这里只借鉴而已。PHY芯片的寄存器主要用来配置PHY芯片按照用户的需求来修改的,如果有学习STM32,那么调用ETH_WritePHYRegister()来指定那个寄存器写入数据,调用ETH_ReadPHYRegister()读取那个寄存器的数据。
其实STM32的ETHERNET的驱动函数已经帮我们写好了,我们只知道四个参数如何填写即可(大家可以使用正点原子的例程,只修改这四个参数就完成通信,前提你的电路是正常的):
#define XXX_PHY_ADDRESS //PHY芯片的 PHY芯片地址.
#define PHY_SR //PHY芯片的PHY状态寄存器地址
#define PHY_SPEED_STATUS //PHY芯片的PHY速度值掩码
#define PHY_DUPLEX_STATUS //PHY芯片的PHY连接状态值掩码
#define XXX_PHY_ADDRESS如何设置:
举个栗子:
这个宏定义根据你的PHY芯片的LED0和LED1管脚,例如某个PHY芯片为例:如果这两个管脚硬件接下拉,那么PHY芯片的 PHY芯片地址设置为0x00或者0。
#define PHY_SR如何设置:
#define PHY_SPEED_STATUS如何设置:
#define PHY_DUPLEX_STATUS如何设置:
举个栗子:
这里小编教你一个方法(重点):这里看PHY芯片寄存器设置的。看那个寄存器可以设置网络速率和工作状态(全双工/半双工) ,那么PHY_SR就是指向这个寄存器,例如某个PHY芯片的某个寄存器:
所以PHY_SR设置为31,或者0x1F,PHY_SPEED_STATUS和PHY_DUPLEX_STATUS根据这个寄存器设置网络的速率和工作状态。
重点又来了,如何调试:
-
首先判断PHY有没有工作,例如判断?就是时钟是否起振。
-
判断PHY芯片的原理图是否正确。
-
判断STM32的REF_CLK管脚有没有50MHz,如果没有那么STM32和PHY芯片无法通信。
-
判断STM32和PHY芯片是否有通信,使用ETH_ReadPHYRegister()读取某个寄存器有数据,那么通信成功。
-
如果STM32和PHY芯片有通信,但无法实现功能,该怎么办呢?建议检测PHY和网口的电路,以及debug stm32xxxx_eth,c的ETH_Init()函数:
举个栗子:
如果你设置的100Mbsp,但是debug时候跳进10Mbsp,表示PHY_SPEED_STATUS宏定义设置错误。如何你设置全双工,但是debug时候跳进半双工,那么PHY_DUPLEX_STATUS定义设置错误。
版权声明:本文为CSDN博主「正点原子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_55796564/article/details/122587276
暂无评论