硬汉嵌入式论坛

 找回密码
 立即注册
查看: 703|回复: 10
收起左侧

[问题解答] H7-TOOL上位机传输文件到 H7-TOOL功能的原理是啥

[复制链接]

9

主题

36

回帖

63

积分

初级会员

积分
63
发表于 2025-2-28 14:25:46 | 显示全部楼层 |阅读模式
上位机把lua和bin传给 H7-TOOL是通过usb,但是我怎么感觉是类似直接拷贝文件过去,这种原理是什么
回复

使用道具 举报

6

主题

264

回帖

282

积分

高级会员

积分
282
发表于 2025-2-28 16:20:31 | 显示全部楼层
方法太多了吧?hid?cdc 串口?winusb?
回复

使用道具 举报

9

主题

36

回帖

63

积分

初级会员

积分
63
 楼主| 发表于 2025-2-28 16:23:12 | 显示全部楼层
fxyc87 发表于 2025-2-28 16:20
方法太多了吧?hid?cdc 串口?winusb?

我知道,但是usb write api也不能直接发文件啊,只是发字节
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115988
QQ
发表于 2025-3-1 05:53:25 | 显示全部楼层
先创建文件,然后传输数据即可
回复

使用道具 举报

9

主题

36

回帖

63

积分

初级会员

积分
63
 楼主| 发表于 2025-3-3 10:25:04 | 显示全部楼层
eric2013 发表于 2025-3-1 05:53
先创建文件,然后传输数据即可

在单片机程序对应的文件存储创建pc上同名文件,然后把pc上的文件以字节流的形式发到单片机?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115988
QQ
发表于 2025-3-3 10:29:41 | 显示全部楼层
lqx30716 发表于 2025-3-3 10:25
在单片机程序对应的文件存储创建pc上同名文件,然后把pc上的文件以字节流的形式发到单片机?

对,可以的。
回复

使用道具 举报

9

主题

36

回帖

63

积分

初级会员

积分
63
 楼主| 发表于 2025-3-3 10:53:53 | 显示全部楼层

你的pc上位机usb hid是通过将h7-tool变成一个u盘,然后通过代码拷贝文件到h7-tool,还是按照文件大小(4字节) + MD5 (16字节) + 文件名长度 + 文件名(最大255字节,无0结束符) + 文件数据传给h7-tool?
回复

使用道具 举报

9

主题

36

回帖

63

积分

初级会员

积分
63
 楼主| 发表于 2025-3-7 11:33:49 | 显示全部楼层

上位机如何退出H7-TOOL usb的EMMC,手动右键弹出都不行

hid发送命令变成usb虚拟EMMC后,hid消失,此时怎么退出u盘模式,手动电脑右键也不行
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115988
QQ
发表于 2025-3-7 12:02:26 | 显示全部楼层
lqx30716 发表于 2025-3-7 11:33
hid发送命令变成usb虚拟EMMC后,hid消失,此时怎么退出u盘模式,手动电脑右键也不行

问题都集中到这个帖子里面回复。

长按C键退出。或者上位机点击退出U盘。
回复

使用道具 举报

9

主题

36

回帖

63

积分

初级会员

积分
63
 楼主| 发表于 2025-3-7 13:51:54 | 显示全部楼层
eric2013 发表于 2025-3-7 12:02
问题都集中到这个帖子里面回复。

长按C键退出。或者上位机点击退出U盘。

HANDLE hDevice; // handle to the drive to be examined
        BOOL bResult; // results flag
        DWORD junk; // discard results
        DWORD dwError;
        String csVolume;


        csVolume = mDiskEmmc;
        // Open the volume
        hDevice = CreateFile(csVolume.c_str(), // drive to open
                GENERIC_READ | GENERIC_WRITE,
                FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
                NULL, // default security attributes
                OPEN_EXISTING, // disposition
                0, // file attributes
                NULL); // don't copy any file's attributes

        if (hDevice == INVALID_HANDLE_VALUE) // can't open the drive
        {
                dwError = GetLastError();
                return;
        }

        //Dismount the volume
        bResult = DeviceIoControl(
                hDevice, // handle to volume
                IOCTL_STORAGE_EJECT_MEDIA, //eject USB
                NULL, // lpInBuffer
                0, // nInBufferSize
                NULL, // lpOutBuffer
                0, // nOutBufferSize
                &junk, // discard count of bytes returned
                (LPOVERLAPPED) NULL); // synchronous I/O
        if (!bResult) // IOCTL failed
        {
                dwError = GetLastError();
        }

        // Close the volume handle
        bResult = CloseHandle(hDevice);
        if (!bResult)
        {
                dwError = GetLastError();
        }按照你这个开源代码是无法退出u盘模式
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115988
QQ
发表于 2025-3-7 13:55:51 | 显示全部楼层
lqx30716 发表于 2025-3-7 13:51
HANDLE hDevice; // handle to the drive to be examined
        BOOL bResult; // results flag
        DWORD junk ...

不好意思,这个无法为大家提供支持,当前只能供操作使用问题支持。还望理解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-1 15:02 , Processed in 0.283403 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表