问题描述
我正在尝试在 ENC28J60 上设置 MAC 地址,但奇怪的是,MAC 没有正确设置,并且在数据表中找不到任何说明如何具体操作的内容。这是我程序的一小部分:
// Selects BANK3
enc28j60_bank_select(cfg,ENC28J60_BANK3);
// 9. Program the local MAC address into theMAADR1:MAADR6 registers.
enc28j60_wcr(cfg,ENC28J60_MEM_BK3_MAADR6,cfg->mac_addr[5]);
enc28j60_wcr(cfg,ENC28J60_MEM_BK3_MAADR5,cfg->mac_addr[4]);
enc28j60_wcr(cfg,ENC28J60_MEM_BK3_MAADR4,cfg->mac_addr[3]);
enc28j60_wcr(cfg,ENC28J60_MEM_BK3_MAADR3,cfg->mac_addr[2]);
enc28j60_wcr(cfg,ENC28J60_MEM_BK3_MAADR2,cfg->mac_addr[1]);
enc28j60_wcr(cfg,ENC28J60_MEM_BK3_MAADR1,cfg->mac_addr[0]);
具体功能是:
enc28j60_wcr()
:
void enc28j60_wcr(enc28j60_config_t *cfg,uint8_t address,uint8_t data)
{
enc28j60_select(cfg);
enc28j60_write_cmd(cfg,ENC28J60_OPCODE_WCR,address);
spi_transceive(data);
enc28j60_deselect(cfg);
}
enc28j60_bank_select()
:
void enc28j60_bank_select(enc28j60_config_t *cfg,enc28j60_econ1_bsel_t bank)
{
uint8_t reg;
// Reads original value of ECON1
reg = enc28j60_rcr(cfg,ENC28J60_MEM_BKX_ECON1);
// Sets the new memory bank
((enc28j60_econ1_t *) ®)->bsel = bank;
// Updates ECON1
enc28j60_wcr(cfg,ENC28J60_MEM_BKX_ECON1,reg);
}
使用此代码读取 mac 时:
void enc28j60_get_mac(enc28j60_config_t *cfg,uint8_t *mac)
{
enc28j60_bank_select(cfg,ENC28J60_BANK3);
for (uint8_t i = 0; i < 6; ++i)
mac[i] = enc28j60_rcr_dummy(cfg,mac_registers[i]);
}
结果是:00:00:00:00:11:00,而我写的mac是:{ 0x11,0x22,0x70,0x8F,0x52,0x80 }
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)