web网管程序在ETH工程已经做好并验证完成了,现在STM32+FPGA实现ping功能,那么web功能应该一样能实现
**问题1:**浏览器输入192.168.1.30,能出现登入界面,但是输入密码点击没反应,果然没有一帆风顺的。
原因:发现有一个设备正常,另一个设备通过TFTP下发web网页偶尔正常。打印排查下,发现读网页大小不对(估计用W25Q16弄的文件系统哪里bug,记录下,等以后处理)
**问题2:**web网管有的卡,登入界面不是很流畅
原因:浏览器下发命令,STM32上传web数据帧,网页数据比较大,有10K以上,需要发送10帧以上数据,STM32与FPGA数据传输效率不行,
解决方法:
1、FSMC驱动速率尽可能快,减少与FPGA通信时间
/* ComSpaceTiming */
ComSpaceTiming.SetupTime = 0;
ComSpaceTiming.WaitSetupTime = 2;
ComSpaceTiming.HoldSetupTime = 2;
ComSpaceTiming.HiZSetupTime = 1;
/* AttSpaceTiming */
AttSpaceTiming.SetupTime = 0;
AttSpaceTiming.WaitSetupTime = 2;
AttSpaceTiming.HoldSetupTime = 2;
AttSpaceTiming.HiZSetupTime = 1;
2、STM32网络输出等待FPGA发送完(数据频率快,可能出现丢包现象)
uint8_t fpgaBuf[1600] = {0};
uint8_t fpga_SendPacket(struct pbuf *p)
{
struct pbuf* q = NULL;
uint8_t regData = 0;
uint16_t txLen = 0;
xSemaphoreTake(FSMC_Handle, 1000);
regData = fpga_One_read(FPAG_TX_ISR);
while((regData &0X01)==1)//FPGA中有未发送完成数据
{
xSemaphoreGive( FSMC_Handle );//给出互斥量
// printf("FPGA donot send over %d\r\n", regData);
return 0;
}
q = p;
txLen = 0;
while(q)
{
if(txLen + q->len >= 1600)
{
xSemaphoreGive( FSMC_Handle );//给出互斥量
printf("FPGA err %d %d\r\n", txLen, q->len);
return 0;
}
memcpy(&fpgaBuf[txLen], (uint8_t*)q->payload, q->len);
txLen += q->len;
q = q->next;
}
if(txLen < 60)// 最少60,ARP应答42字节无效?
{
memset(&fpgaBuf[txLen], 0, (60 - txLen));
txLen = 60;
}
fpga_write(FPAG_TX_ADD, fpgaBuf, txLen);
fpga_One_write(FPAG_TX_LEN_ADDH,(txLen>>8)&0XFF);
fpga_One_write(FPAG_TX_LEN_ADDL, txLen&0XFF);
fpga_One_write(FPAG_TX_ISR, 0X01);
while((fpga_One_read(FPAG_TX_ISR)&0X01)); //等待发送完成
// printf("FPGA send start %d\r\n", txLen);
xSemaphoreGive( FSMC_Handle );//给出互斥量
return 1;
}
3、减小web网页,减少发送次数
web网管实现,udp、tcp通讯应该没问题,这监控数据通信,频率很低,数据很少