logo资料库

DM9051驱动源码介绍.docx

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
DM9051NP 乙太網芯片驅動源代碼介绍
一、DM9051NP 介紹
二、驱动程序说明
DM9051NP 乙太網芯 片驅動源代碼 介绍 一 、 DM9051NP 介 紹 DM9051NP SP I 接 口 以 太 网 模 块 是 联 杰 国 际 (DAVI COM) 为 了 方 便 嵌 入 式 ARM 、 MCU 单 片 机 系 统 进 行 以 太 网 通 信 而 开 发 出 的 解 决 方 案 。DM9051NP 芯 片 是 带 有 行 业 标 准 串 行 外 设 接 口( Serial Peripheral Interface ,SPI )的 独 立 以 太 网 控 制 器 。DM9051N P 符 合 IEEE 802.3 规 范 ,支 持 以 DMA 模 式 来 传 输 ,以 实 现 数 据 传 送 快 速 。DM9051N P 通 过 1 个 中 断 引 脚 和 SPI 接 口 来 进 行 与 主 控 制 器 MCU 单 片 机 的 通 信 , 数 据 传 输 规 格 为 10/ 100 M 。 ・ Package:32 支 接 脚 封 装 ,QFN. ・ IEEE 802.3az Energy Ef ficient Ethernet (E EE) ・ Built-in integrated 3.3V to 1.8V regulator ・ 远 程 唤 醒 (W OL) ・ 并 行 线 / 交 叉 线 自 动 切 换 HP Auto-MDIX ・ Support 光 口 界 面 ・ 具 有 16KB SRAM 静 态 随 机 存 取 记 忆 ・ EMI (Class B) and HBM ESD Rating 8KV ・ 工 业 温 度 规 范 : –40 ℃ to +85 ℃ ・ 功 耗 : ( 100/10 M ) => 429/561 mW ・ 连 续 工 作 温 度 <60 ℃ 二 、 驱 动 程 序 说 明 1.DM9051 的 寄 存 器 读 写 方 式 说 明 由 于 DM9051NP 以 太 网 口 芯 片 采 用 的 是 SPI 串 行 接 口 模 式 ,其 对 内 部 寄 存 器 读 写 的 规 则 是 先 发 操 作 码 bit 7 (set 0 or 1) + 寄 存 器 地 址 < 后 7bit> ,再 发 送 欲 操 作 数 据 (bit 0~8) 。
通 过 不 同 操 作 码 来 判 别 操 作 时 读 寄 存 器 ( 缓 存 区 ) 还 是 写 寄 存 器 ( 缓 冲 区 ) 或 是 其 它 。 2.DM9051 模 式 设 定 说 明 : (1) 设 定 DM9051 PHY Mode , DM9051 支 持 以 下 Speed 和 全 / 半 双 工 设 定 ・ DM9051_AUTO Auto negot iat ion ・ DM9051_10MHD 10MHz, Half duplex ・ DM9051_10MF D 10MHz, Full duplex ・ DM9051_100MHD 100MHz, Half duplex ・ DM9051_100MFD 100MHz, Full duplex en um DM 90 5 1_ P HY _ mo d e { }; DM9 0 51 _ 10 M HD = 0, DM9 0 51 _ 10 0 MH D = 1, DM9 0 51 _ 10 M FD = 4, DM9 0 51 _ 10 0 MF D = 5, DM9 0 51 _ 10 M DM9 0 51 _ AU T O = 6, = 8, DM9 0 51 _ 1M _ HP N A = 0x1 0
以 上 模 式 透 过 SPI 写 入 Regist er , 可 参 考 DM9051 Driver 。 (2) 选 择 DM9051 Chip Type , 目 前 使 用 的 TYPE_DM9051 en um DM 90 5 1_ T YP E { }; TYP E _D M 90 0 0E , TYP E _D M 90 0 0A , TYP E _D M 90 0 0B , TYP E _D M 90 5 1 (3) 在 上 述 建 立 Mode 和 Tyep 表 后 , 放 入 struct DM9051_eth , 以 便 后 续 设 定 使 用 。 st ru c t DM 90 5 1_ e th { /* 设 定 目 前 使 用 的 网 络 芯 片 类 型 */ enu m DM9 0 51 _ TY P E typ e ; /* 设 定 PH Y 使 用 的 Sp ee d an d Du pl e x */ enu m DM9 0 51 _ PH Y _m o de mo de ; /* In te r ru p t Ma sk Re sg i st e r 设 定 值 */ uin t 8_ t imr _ al l ; /* pa ck e t I or II */ uin t 8_ t pac k et _ cn t ; /* qu eu e d pa ck e t (pa c ke t II )* / uin t 16 _ t qu eu e _p a ck e t_ l en ; /* in te r fa c e MA C add r es s in fo . */ uin t 8_ t dev _ ad d r[ 6 ]; }; st at i c st ru c t DM 90 5 1_ e th DM 90 5 1_ d ev i ce ; 3.DM9051 驱 动 程 序 说 明 (1)MCU SPI Configure
如 同 上 述 介 绍 的 DM9051NP 以 太 网 口 芯 片 采 用 的 是 SPI 串 行 接 口 模 式 ,首 先 第 一 步 先 确 认 MCU 有 支 持 SPI ,再 来 配 置 SP I Master 的 相 关 设 定 ,在 这 以 STM32F103Z E SPI1 设 定 为 参 考 , 其 他 MCU 可 直 接 参 考 MCU 的 SPI example 设 定 。 Source code : vo id DM 90 5 1_ S PI _ Co n fi gu r at i on ( vo i d) { SPI _ In i tT y pe D ef SP I_ I ni t St r uc t ur e; GPI O _I n it T yp e De f GPI O _I n it S tr u ct ur e ; EXT I _I n it T yp e De f EXT I _I n it S tr u ct ur e ; DMA _ In i tT y pe D ef DM A_ I ni t St r uc t ur e; /* 使 能 SPI 1 时 钟 */ RCC _ AP B 2P e ri p hC l oc k Cm d( R CC _ AP B 2P e ri p h_ S PI 1, En ab l e) ; /* 找 出 MC U SP I Pi n , 在 这 以 配 置 SP I1 pin s 为 例 : SC K, MI SO an d MOS I */ GPI O _I n it S tr u ct u re . GP IO _ Pi n = DM 90 5 1_ S PI _S C K_ P IN | DM 90 5 1_ S PI _ MI S O_ P IN | DM 90 5 1_ S PI _ MO S I_ P IN ; GPI O _I n it S tr u ct u re . GP IO _ Mo d e = GP IO _ Mo d e_ A F_ P P; GPI O _I n it S tr u ct u re . GP IO _ Sp e ed = GP IO _ Sp e ed _ 50 M Hz ; GPI O _I n it ( DM 9 05 1 _S P I_ PI N _G R OU P , &G PI O _I n it S tr u ct u re ) ; /* Co nf i gu r e I/ O for DM 90 5 1 Ch ip se le c t */ GPI O _I n it S tr u ct u re . GP IO _ Pi n = DM 90 5 1_ S PI _C S _P I N; GPI O _I n it S tr u ct u re . GP IO _ Mo d e = GP IO _ Mo d e_ O ut _ PP ; GPI O _I n it ( DM 9 05 1 _S P I_ CS _ GR O UP , &G PI O _I n it S tr u ct u re ) ; GPI O _S e tB i ts ( DM 9 05 1 _S PI _ PI N _G R OU P , DM 90 5 1_ S PI _ SC K _P I N | DM 90 5 1_ S PI _ MI S O_ P IN | DM 90 5 1_ S PI _ MO S I_ P IN ) ; /* SP I1 为 Ma st e r 相 关 设 定 参 考 */ /* 设 置 SP I 单 向 或 者 双 向 的 数 据 模 式 :S PI 设 置 为 双 线 双 向 全 双 工 */
SPI _ In i tS t ru c tu r e. S PI _D i re c ti o n = SP I_ D ir e ct i on _ 2L in e s_ F ul l Du p le x ; /* 设 置 SP I 工 作 模 式 : 设 置 为 主 SP I */ SPI _ In i tS t ru c tu r e. S PI _M o de = SP I_ M od e _M a st e r; /* 设 置 SP I 的 数 据 大 小 :S PI 发 送 接 收 8 位 帧 结 构 */ SPI _ In i tS t ru c tu r e. S PI _D a ta S iz e = SP I_ D at a Si ze _ 8b ; /* 选 择 了 串 行 时 钟 的 稳 态 : 时 钟 拉 低 */ SPI _ In i tS t ru c tu r e. S PI _C P OL = SP I_ C PO L _L o w; /* 资 料 捕 获 于 第 一 个 时 钟 沿 */ SPI _ In i tS t ru c tu r e. S PI _C P HA = SP I_ C PH A _1 E dg e ; /* NS S 信 号 由 硬 件 ( NS S 管 脚 ) 还 是 软 件 ( 使 用 SSI 位 ) 管 理 : 内 部 NSS 信 号 有 SS I 位 控 制 */ SPI _ In i tS t ru c tu r e. S PI _N S S = SP I_ N SS _ So f t; /* 定 义 波 特 率 预 分 频 的 值 : 波 特 率 预 分 频 值 为 2 */ SPI _ In i tS t ru c tu r e. S PI _B a ud R at e Pr e sc a le r = SP I_ B au d Ra te P re s ca l er _ 2; /* 指 定 数 据 传 输 从 MS B 位 还 是 LSB 位 开 始 : 数 据 传 输 从 MS B 位 开 始 */ SPI _ In i tS t ru c tu r e. S PI _F i rs t Bi t = SP I_ F ir s tB it _ MS B ; /* CR C 值 计 算 的 多 项 式 */ SPI _ In i tS t ru c tu r e. S PI _C R CP o ly n om i al = 7; /* 根 据 SP I_ I ni t St r uc t 中 指 定 的 参 数 初 始 化 外 设 SP Ix 寄 存 器 */ SPI _ In i t( D M9 0 51 _ SP I , &S PI _ In i tS t ru c tu r e) ; /* 使 能 DM 90 5 1_ S PI */ SPI _ Cm d (D M 90 5 1_ S PI , ENA B LE ) ; } 以 上 ST M32F 103ZE SPI1 相 关 配 置 , 需 注 意 的 设 定 如 下 : /* 资 料 捕 获 于 第 一 个 时 钟 沿 */ SP I_ I ni t St r uc t ur e .S P I_ CP H A = SP I_ C PH A _1 E dg e ; /* NSS 信 号 由 硬 件 ( NS S 管 脚 ) 还 是 软 件 ( 使 用 SS I 位 ) 管 理 : 内 部 NSS 信 号 有 SS I 位 控 制 */
SP I_ I ni t St r uc t ur e .S P I_ NS S = SP I_ N SS _ So ft ; SPI 的 Master 、 Slave 必 须 配 置 成 相 同 的 时 序 模 式 , 此 部 分 参 考 MCU SPI mode 和 DM9051 SPI mode 相 对 应 的 设 定 。 (2) MCU SPI 读 写 一 字 节 程 序 和 读 写 DM9051 Regist er & Memory 说 明 a. 此 程 序 可 参 考 STM32 SPI example 或 网 络 上 搜 寻 相 关 写 法 参 考 st at i c co ns t __ in l in e ui nt 8 _t SP I_ D M9 0 51 _ Se n dB y te ( ui nt 8 _t by te ) { } /* 检 查 指 定 的 SP I 标 志 位 设 置 与 否 : 发 送 缓 存 空 */ whi l e (S PI _ I2 S _G e tF l ag S ta t us (D M 90 5 1_ S PI , SP I_ I 2S _ FL A G_ T XE ) == 0) ; /* 通 过 外 设 SP Ix 发 送 一 个 数 据 */ SPI _ I2 S _S e nd D at a (D M 90 51 _ SP I , by te ) ; /* 判 断 接 收 是 否 完 成 */ whi l e (S PI _ I2 S _G e tF l ag S ta t us (D M 90 5 1_ S PI , SP I_ I 2S _ FL A G_ R XN E ) == 0) ; /* 返 回 通 过 SP Ix 最 近 接 收 的 数 据 */ ret u rn SP I_ I 2S _ Re c ei v eD at a (D M 90 5 1_ S PI ) ; 在 撰 写 完 SP I 读 写 一 个 字 节 程 序 后 ,即 可 撰 写 MCU 读 写 DM9051 Registe r 和 Memory function 。 b. MCU 读 取 DM9051 Register ui nt 8 _t DM 90 5 1_ R ea d _R e g( ui n t8 _ t Re g_ O ff ) { ui nt 8 _t sp i_ d at a ; #i fd e f DM 90 5 1_ I NT /* 关 闭 MCU 所 有 In te r ru p t */ IN T_ A LL _ DI S AB L E( ) ;
#e nd i f // DM 9 05 1 _I N T /* 使 能 SPI CS S , SP I 开 始 送 收 */ SP I_ D M9 0 51 _ CS _ LO W () ; /* SPI tr an s fe r DM 90 5 1 Re ad - Co m ma n d an d Re g. of fs e t. */ SP I_ D M9 0 51 _ Se n dB y te ( Re g_ O ff ) ; /* Dum m y for re ad reg i st e r va lu e . */ sp i_ d at a = SP I_ D M9 0 51 _ Se n dB yt e (0 x 0) ; /* 禁 止 SPI CS S , 完 成 操 作 */ SP I_ D M9 0 51 _ CS _ HI G H( ) ; #i fd e f DM 90 5 1_ I NT /* 打 开 MCU 所 有 In te r ru p t */ IN T_ A LL _ EN A BL E () ; #e nd i f // DM 90 5 1_ I NT re tu r n sp i_ d at a ; } c. MCU 写 入 DM9051 Register vo id DM 90 5 1_ W ri t e_ R eg (u i nt 8 _t Re g_ O ff , ui nt 8 _t sp i_ d at a ) { uin t 8_ t cmd a dd r ; cmd a dd r = (R eg _ Of f | 0x 80 ) ; #if d ef DM 90 5 1_ I NT /* 关 闭 MC U 所 有 In te r ru p t */ INT _ AL L _D I SA B LE ( );
#en d if // DM 9 05 1 _I N T /* 使 能 SP I CS S , SP I 开 始 送 收 */ SPI _ DM 9 05 1 _C S _L O W( ) ; /* SP I tr an s fe r DM 90 5 1 Rea d -C o mm a nd an d Re g. of fs e t. */ SPI _ DM 9 05 1 _S e nd B yt e (c md a dd r ); /* SP I1 写 操 作 数 据 */ SPI _ DM 9 05 1 _S e nd B yt e (s pi _ da t a) ; /* 禁 止 SP I CS S , 完 成 操 作 */ SPI _ DM 9 05 1 _C S _H I GH ( ); #if d ef DM 90 5 1_ I NT /* 打 开 MC U 所 有 In te r ru p t */ INT _ AL L _E N AB L E( ) ; #en d if // DM 9 05 1 _I N T ret u rn ; } d. MCU 读 取 DM9051 Memory vo id DM 90 5 1_ R ea d _M e m( ui n t8 _ t* pu 8d a ta , ui nt 1 6_ t da ta l en ) { uin t 32 _ t i; uin t 8_ t bu rs t cm d = SPI _ RD _ BU R ST ; // Re ad SPI _ Da t a_ A rr a y ba ck fr om th e sl av e #if d ef DM 90 5 1_ I NT
分享到:
收藏