Thread 中讨论的其他器件:TMS570LC4357
工具/软件:
我正在处理一个项目、涉及在两个 TMS570LC4357微控制器之间使用 EMAC (以太网介质访问控制器)模块来设置以太网通信。 我的目标是将数据包从一个 TMS570LC4357 (板 A)发送到另一个(板 B)、并在板 B 上接收数据包、从而实现双向通信。
每个电路板都有唯一的 MAC 地址:
- 电路板 A:00:08:EE:03:A6:6C
- 电路板 B:00:08:EE:03:A6:6D
我从电路板 A 发送一个64字节的数据包、其中:
- Destination MAC:板 B 的 MAC (00:08:EE:03:A6:6D)或广播(FF:FF:FF:FF:FF:FF:FF)。
- 源 MAC:电路板 A 的 MAC。
- EtherType:0x88B5 (自定义)。
- 有效载荷:"hello"后跟零。
我通过从论坛导入一个示例工程、在单板上测试了环回模式:
#include "HL_sys_common.h"
#include "HL_system.h"
#include "HL_emac.h"
#include "HL_hw_reg_access.h"
//用于跟踪传输状态的全局标志
Volatile uint8 txSuccessFlag = 0;
UINT8 src_emacAddress(6U]={0x00U、0x08U、0xEEU、0x03U、0xA6U、 0x6CU};// TX MAC
Uint8 dest_emacAddress[6U]={0xFFU、0xFFU、0xFFU、0xFFU、0xFFU、0xFFU、 0xFFU};// RX MAC
extern hdkif_t hdkif_data[1];
pbuf_t pack[1];
uint8 data[1][100];
uint8 a = 0;
uint8 b = 0;
void create_packet()
{
int j;
Pack[0].tot_len = 64;//确保它>=最小以太网帧大小
Pack[0].len = 64;
//目标 MAC
对于(j = 0;j < 6;j++)
DATA[0][j]= dest_emacAddress[j];
//源 MAC
对于(j = 0;j < 6;j++)
DATA[0][j + 6]= src_emacAddress[j];
// EtherType
DATA[0][12]= 0x88;
DATA[0][13]= 0xB5;
//有效负载"hello"
DATA[0][14]='h';
DATA[0][15]='e';
DATA[0][16]='l';
DATA[0][17]='l';
DATA[0][18]='o';
对于(j = 19;j < 64;j++)
DATA[0][j]= 0x00;
Pack[0].payload =&data[0][0];
Pack[0].next = NULL;
}
// TX 完成时调用通知函数
void emacTxNotification (hdkif_t *hdkif)
{
//设置标志以指示传输成功
txSuccessFlag = 1;//传输成功完成
}
void main (void)
{
_enable_irq();
EMACHWInit (src_emacAddress);
create_packet();
while (1){
txSuccessFlag=0;
IF (EMACTransmit (&hdkif_data[0]、&pack[0])!= 0)
{
//传输已启动、现在等待通知
while (txSuccessFlag =0);//等待通知(TX 成功)
if (txSuccessFlag == 1){
//传输成功
a++;//一些表示成功的逻辑
}其他{
//传输失败
B = 9;//一些指示故障的逻辑
}
}
暴露
{
B = 9;
}
}
}
通过检查 TXGOODFRAMES 和 RXGOODFRAMES for Broadcast、我们可以看到值在递增
现在、我将转向板对板通信。
pleases 为我提供了在2块电路板之间传输和接收数据包的建议和步骤
如有任何指导、代码片段或对类似工程的引用、我们将不胜感激! 我特别想了解让 TX/RX 正常工作并调试任何问题的实用步骤。 提前感谢您的帮助!
此致、
Tanuj Soni