You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TFTP客户端请求文件时出现「打开文件失败」错误求助

TFTP客户端请求文件时出现「打开文件失败」问题排查

我曾在NXP社区论坛发布过该问题,团队表示LWIP为开源软件,与NXP无关,对此我表示认同。

应用场景

  • PC端运行TFTPD64服务器,存储所有固件文件
  • MCU端运行TFTP客户端,通过文件名向服务器请求固件文件
  • MCU接收固件文件后启动软件升级(擦除并写入全部闪存)

问题描述

MCU端的TFTP客户端代码大部分取自某GitHub仓库,客户端已在69端口正常启动,但向服务器请求文件时出现「打开文件失败」错误,尽管服务器已指向该文件且文件可用。

相关代码

客户端初始化代码

void tftp_example_init_client(void)
{
  void *f;
  err_t err;
  ip_addr_t srv;
  int ret = ipaddr_aton(LWIP_TFTP_SERVER_IP, &srv);
  if(ret != 1)
  {
    printf("ipaddr_aton failed \r\n");
  }


  err = tftp_init_client(&tftp);
  if(err != ERR_OK)
  {
      printf("tftp_init_client failed, error : %d \r\n", err);
  }

  f = tftp_open_file(LWIP_TFTP_FILENAME, 1);
  if(f == NULL)
  {
     printf("failed to open file , %d \r\n", f);
  }

  err = tftp_get(f, &srv, TFTP_PORT, LWIP_TFTP_FILENAME, 
TFTP_MODE_OCTET);
  if(err != ERR_OK)
  {
      printf("tftp_get failed \r\n");
  }

}

tftp_open_file函数定义

static void * tftp_open_file(const char* fname, u8_t is_write)
{
  snprintf(full_filename, sizeof(full_filename), "%s%s", LWIP_TFTP_BASE_DIR, 
fname);
  full_filename[sizeof(full_filename)-1] = 0;
  printf("%s \r\n",fname);
  if (is_write) {
    return (void*)fopen(full_filename, "wb");
  } else {
    return (void*)fopen(full_filename, "rb");
  }
}

static void* tftp_open(const char* fname, const char* mode, u8_t is_write)
{
  LWIP_UNUSED_ARG(mode);
  return tftp_open_file(fname, is_write);
}

补充信息

#define LWIP_TFTP_SERVER_IP "192.168.225.20"
#define LWIP_TFTP_FILENAME "0223.bin"
#define LWIP_TFTP_BASE_DIR "\\"

TFTP服务器错误截图

错误截图

恳请各位帮忙解决该问题,谢谢。

内容的提问来源于stack exchange,提问作者lily amazon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:33:15