硬汉嵌入式论坛

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

[脱机烧录] H7-TOOL的SPI接口方式脱机烧录操作方法,已经发布(2022-07-27)

  [复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2022-7-25 01:09:32 | 显示全部楼层 |阅读模式
通过Lua小程序,我们可以方便方便的在线方式做SPI接口方式固件烧录,也可以离线方式运行Lua小程序做烧录。

本次是说明是采用H7-TOOL的SPI接口连接我们V7板子做的操作说明。

【协议说明】

1、发送固件大小:符号‘*’ 来同步,然后发送固件大小,板子收到后,回复0x30表示擦除相应扇区大小成功,回复0x60表示擦除失败。
2、发送固件数据:符号‘$’ 来同步,然后发送固件数据,每次64字节大小,板子收到后,回复0x30表示数据编程成功,回复0x60表示擦除失败。如此反复,一直到发送完毕。
3、发送结束命令:符号‘#’ 表示传输结束,目标板可以加载到APP运行了。

我们这里SPI时钟设置为12.5MHz,空闲时SCK为0,上升沿采集数据。

【硬件接线】
H7-TOOL通过SPI接到V7板子的SPI接口上

image.png

[C] 纯文本查看 复制代码
_________________________                        _____________________________
|           ______________|                      |______________________       |
|          |     SPI1     |                      |        SPI1          |      |
|          |              |                      |                      |      |
|          |      CLK(D5) |______________________|(PB3)CLK              |      |
|          |              |                      |                      |      |
|          |     MISO(D3) |______________________|(PB4)MISO             |      |
|          |              |                      |                      |      |
|          |     MOSI(D2) |______________________|(PB5)MOSI             |      |
|          |              |                      |                      |      |
|          |______________|                      |______________________|      |
|      __                 |                      |                             |
|     |__|                |                      |                             |
|     USER                |                      |                             |
|                      GND|______________________|GND                          |
|                         |                      |                             |
|_H7-TOOL Master _________|                      |_STM32H7 Slave ______________|


【准备工作】

当前上位机还没有做专门的SPI接口脱机烧录一键下载界面,需要手动将Lua文件和app固件存到TOOL的eMMC

1、H7-TOOL进入虚拟U盘

上电首界面长按S键 -> 系统设置 -> USB eMMC磁盘, 进入eMMC模拟U盘后,在如下路径新建文件夹串口脱机烧录

image.png

将如下两个文件存到新建的文件夹下

app.bin (50.03 KB)
spibootloader.lua (3.8 KB)

image.png

2、将目标板程序下载到V7开发板

硬件SPI从机实现。

基于V7的SPI接口脱机烧录目标板程序.7z (7.64 MB)

【在线方式操作说明】

H7-TOOL可以采用USB,以太网或者WiFi方式连接上位机。

将前面lua小程序spibootloader.lua的内容复制到如下窗口:

image.png

点击下面的执行按钮就可以看到动图更新了:




【离线方式操作说明】

操作TOOL显示屏,进入Lua小程序界面:

image.png

执行spifirmware.lua小程序。

执行效果如下:

image.png


【Lua小程序简单说明】
注释非常详细:


[Lua] 纯文本查看 复制代码
-------------------------------------------------------
--   
--     H7-TOOL 的SPI脱机烧录Lua小程序实现
--
-------------------------------------------------------        
local str
local len
local bytes
local bin
local offset
local value
local count
local filesize
local byte0
local byte1
local byte2
local byte3
local filepath = "0:/H7-TOOL/Lua/SPI脱机烧录/app.bin" -- 表示SPI脱机烧录文件夹下存的文件
local filepath1 = "0:/H7-TOOL/Lua/SPI脱机烧录"        -- 浏览SPI脱机烧录文件下存的文件
local ack
local i, m
local res
local str_offset
local str_offset1
local str_offset2
local rd

-------------------------------------------------------
--   第1步:浏览串口脱机烧录文件夹下存的文件
-------------------------------------------------------
f_dir(filepath1)
print()

-------------------------------------------------------
--   第3步:发送固件大小,方便目标板擦除相应大小扇区
-------------------------------------------------------
-- 获取固件大小
filesize=f_size(filepath)    
print("============================================")
str= string.format("固件大小:%d",filesize)
print(str)

-- 将固件大小转换成四个字节
byte0 = ((filesize >> 0) & 0xFF)
byte1 = ((filesize >> 8) & 0xFF)
byte2 = ((filesize >> 16) & 0xFF)
byte3 = ((filesize >> 24) & 0xFF)

--配置SPI时钟12.5MHz,空闲时SCK为0,上升沿采集数据
spi_bus("init", 5, 0, 0)

--发送固件大小给目标板
--发送*号表示固件大小命令
--发送固件大小
--固定发送64字节,前5个字节是其它用途
str_offset = string.format("%02d", 69 - 5)
str= string.format("%c%c%c%c%c".."%"..str_offset.."s", 42, byte0, byte1, byte2, byte3, "A")
print(str)

spi_bus("send", str)     --发送二进制字符串
rd = spi_bus("recive", 1)

delayms(3000)

if(rd == '\x30') then 
    print("扇区擦除执行完毕")
else
    print("扇区擦除执行失败")
end

-------------------------------------------------------
--   第4步:发送固件大小
-------------------------------------------------------
offset = 0
-- 第1个参数是路径,第2个参数的偏移地址,第3个参数读取大小
-- 返回值bytes表示读取的字节数,bin表示都回的数据
bytes, bin = f_read(filepath, 0, 64) 
offset = offset + bytes

-- 读取数据为0,表示传输完毕
while(bytes > 0)
do

    -- 发送$表示开始传输固件命令
    -- 发送固件数据给目标板
    -- 固定每次发送64个字节,前5个字节其它用途
    count = 69 - 2 - bytes
    str_offset = string.format("%02d", count)
    str_offset1 = string.format("%"..str_offset.."s", "A")
    str_offset2 =  string.format("$%c", bytes)
    str= str_offset2..bin..str_offset1

    spi_bus("send", str)     --发送二进制字符串
    rd = spi_bus("recive", 1)

    delayms(15)

     -------获取返回值-----------------------
    if(rd == '\x30') then  -- 如果返回值是0x30,继续读取
        bytes, bin = f_read(filepath, offset, 64)  -- 继续读取数据
        offset = offset + bytes
        if(bytes ~= 0) then                       -- 读取不为0,打印发送的总字节数
            print("发送固件:", offset)
        end
    else
        print("扇区编程执行失败")  
    end
end

-------------------------------------------------------
--   第5步:发送传输结束命令
-------------------------------------------------------
str_offset = string.format("%02d", 69 - 1)
str= string.format("#".."%"..str_offset.."s", "A")

spi_bus("send", str)     --发送二进制字符串
spi_bus("recive", 1)

print("固件传输完成")

-------------------------------------------------------
--  end of file
-------------------------------------------------------

【目标板程序简单说明】
最关键的就是SPI程序处理:

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*	函 数 名: DemoSpiSlave
*	功能说明: SPI 从机通信
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
void DemoSpiSlave(void)
{
	uint32_t SectorCount = 0;
	uint32_t SectorRemain = 0;
	uint32_t i;
    uint32_t TotalSize = 0;
	uint8_t ucState;
	
    
    /***************设置SPI Flash片选上拉,防止影响 ***************/
    {
        GPIO_InitTypeDef gpio_init;

        /* 打开GPIO时钟 */
        __HAL_RCC_GPIOD_CLK_ENABLE();
        
        gpio_init.Mode = GPIO_MODE_OUTPUT_PP;	/* 设置推挽输出 */
        gpio_init.Pull = GPIO_NOPULL;			/* 上下拉电阻不使能 */
        gpio_init.Speed = GPIO_SPEED_HIGH;  	/* GPIO速度等级 */	
        gpio_init.Pin = GPIO_PIN_13;	
        HAL_GPIO_Init(GPIOD, &gpio_init);

        GPIOD->BSRR = GPIO_PIN_13;
    }
    
	sfDispMenu();		/* 打印命令提示 */
	
	bsp_StartAutoTimer(0, 100);	/* 启动1个100ms的自动重装的定时器 */
    
    /* 上电后,准备接收主机命令 */
	g_spiTxBuf[69] = 0x30;
    g_spiLen = 70;
    bsp_spiTransfer();
    
	while(1)
	{
		bsp_Idle();		/* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
		
		/* 判断定时器超时时间 */
		if (bsp_CheckTimer(0))	
		{
			/* 每隔100ms 进来一次 */  
			bsp_LedToggle(2);
		}

        if (wTransferState != TRANSFER_WAIT)
        {
			/* 根据固件大小,做扇区擦除 ************/
			if(g_spiRxBuf[0] == '*')
			{
				/* 获取文件大小 */
				filesize = g_spiRxBuf[1] + (g_spiRxBuf[2] << 8) + (g_spiRxBuf[3] << 16) + (g_spiRxBuf[4] << 24);
				uwAppSize = filesize;
				for(int i = 0; i < 69; i++)
				{
					printf("%x ", g_spiRxBuf[i]);
				}
				
				/* 根据文件大小执行擦除 */
				SectorCount = filesize/(128*1024);
				SectorRemain = filesize%(128*1024);	
				
				printf("filesize = %d\r\n", filesize);
				for(i = 0; i < SectorCount; i++)
				{
					bsp_EraseCpuFlash((uint32_t)(AppAddr + i*128*1024));
				}
				
				if(SectorRemain)
				{
					bsp_EraseCpuFlash((uint32_t)(AppAddr + i*128*1024));
				}
				
				/* 返回0x30,表示擦除成功 */
				/* 上电后,准备接收主机命令 */
				g_spiTxBuf[69] = 0x30;
				g_spiLen = 70;
				bsp_spiTransfer();
			}
			
			/* 传输完成命令 **************/
			if(g_spiRxBuf[0]  == '#')
			{
				JumpToApp();
			}
			
			/* 开始传输固件命令 **************/
			if(g_spiRxBuf[0]  == '$')
			{					   
				/* 接收数据个数 */
				RecSize = g_spiRxBuf[1];
				
				/* 编程内部Flash, */
				ucState = bsp_WriteCpuFlash((uint32_t)(AppAddr + TotalSize),  (uint8_t *)&g_spiRxBuf[2], RecSize);
				TotalSize += RecSize;
				printf("=====%d\r\n", TotalSize);
				
				/* 如果返回非0,表示编程失败 */
				if(ucState != 0)
				{
					/* 返回0x60,表示编程失败 */
					g_spiTxBuf[69] = 0x60;
				}
				else
				{
					g_spiTxBuf[69] = 0x30;
				}
				
				/* 返回0x30,表示擦除成功 */
				/* 上电后,准备接收主机命令 */
				g_spiLen = 70;
				bsp_spiTransfer();
			}
		}
	}
}





【参考资料】

之前更新过三期BootLoader的视频教程,可以作为参考学习:

单片机bootloader专题,启动,跳转配置和调试下载的各种用法
https://www.armbbs.cn/forum.php?mod=viewthread&tid=112792

基于NAND,eMMC,SD卡和U盘的BootLoader实战,带CRC完整性校验
https://www.armbbs.cn/forum.php?mod=viewthread&tid=113053

单片机BootLoader的AES加密实战,含上位机和下位机代码全开源
https://www.armbbs.cn/forum.php?mod=viewthread&tid=113361






评分

参与人数 1金币 +10 收起 理由
missfox + 10 很给力!

查看全部评分

回复

使用道具 举报

23

主题

1432

回帖

1501

积分

至尊会员

积分
1501
发表于 2022-7-25 11:08:11 | 显示全部楼层
给力,最近发布的几个用法都很实用,准备车间试试。
代码不规范,亲人两行泪!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2022-7-26 02:43:48 | 显示全部楼层
周报已经发布,白天了更新此贴:


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2022-7-27 02:59:26 | 显示全部楼层
更新完毕。
回复

使用道具 举报

36

主题

2049

回帖

2157

积分

至尊会员

积分
2157
发表于 2022-7-28 10:03:22 | 显示全部楼层
这个没加硬件片选? 加上更好
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2022-7-28 10:35:03 | 显示全部楼层
byccc 发表于 2022-7-28 10:03
这个没加硬件片选? 加上更好

可以加,之前做的这个SPI主从机双机通信的例子是加的。
https://www.armbbs.cn/forum.php?mod=viewthread&tid=111872
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-13 11:41:17 | 显示全部楼层
本帖最后由 ug82 于 2023-1-13 13:34 编辑


str_offset1 = string.format("%"..str_offset.."s", "A")

这条语句是生成长度为 str_offset 的字符串吗?这个长度是否包括了最后的字符 A  ?以及这个字符串中填充的内容是什么?

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-1-13 14:58:49 | 显示全部楼层
ug82 发表于 2023-1-13 11:41
str_offset1 = string.format("%"..str_offset.."s", "A")

这条语句是生成长度为 str_offset 的字符串 ...

对,比如str_offset = “12”, 那么这个函数就相当于string.format("%12s", "A")
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-13 15:23:24 | 显示全部楼层
eric2013 发表于 2023-1-13 14:58
对,比如str_offset = “12”, 那么这个函数就相当于string.format("%12s", "A")

ok,thanks
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-13 16:09:14 | 显示全部楼层

lua 里面,如何让 spi 发送/接收时产生 cs0 片选啊 ?有一个接口函数供调用吗 ?

在 H7-tools 上位机页面上,点击 “执行” 可以产生片选信号;而运行上面的 lua 脚本,就不能产生cs信号;尝试 lua 当中不调用 spi_bus("init", 5, 0, 0),而通过 h7-tools上位机工具中点击配置SPI,再执行lua脚本,依然是没有cs信号产生。


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-1-13 18:28:40 | 显示全部楼层
ug82 发表于 2023-1-13 16:09
lua 里面,如何让 spi 发送/接收时产生 cs0 片选啊 ?有一个接口函数供调用吗 ?

在 H7-tools 上位机 ...

image.png
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-15 08:53:38 | 显示全部楼层
多谢。将这样改一下产生 cs信号。

gpio_cfg(0, 1)                        --配置模式D0 = 1-GPIO_OUT
...
while(bytes > 0)

...
gpio_write(0, 0)                 --设置输出D0 = 0
spi_bus("send", str)            --发送二进制字符串
gpio_write(0, 1)                 --设置输出D0 = 1

...
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-16 12:06:34 | 显示全部楼层
遇见一个问题, 每次第 一次打开 h7-tools,运行脚本,用 kingst 抓波形看到 h7-tools 发出的 spi 数据 总是 有错的。

发送的二进制文件已经放置到 h7-tools 目录下,因为spi IO 电压是1.8v,所以我的操作流程是:
1)h7-tools 工具 接上电脑 usb
2)打开 H7-tools 上位机工具,在 SPI页面下,选择 6.25 Mhz,然后依次点击:配置SPI、启动总线
3)将脚本复制到 LUA页面的 Lua 文件内容窗口下,点击执行。此时 用 kingst 抓到的数据波形,总是有错误,(出错位置不定,每次可能不一样)

脚本如下:(每 64字节之前,有一个 CMD=0x02,然后是 4字节地址,接下来是 64字节数据)
local str
local bytes
local bin
local offset
local byte0
local byte1
local byte2
local byte3
local filepath     = "0:/H7-TOOL/Lua/spi_download/app.bin" -- 表示SPI脱机烧录文件夹下存的文件
local filepath_dir = "0:/H7-TOOL/Lua/spi_download"         -- 文件所在目录
local str_offset
local str_offset1
local str_offset2
local filesize

-------------------------------------------------------
--   浏览烧录文件夹下存的文件
-------------------------------------------------------
f_dir(filepath_dir)
print()

-- 获取固件大小
filesize = f_size(filepath)   
print("============================================")
str = string.format("固件大小:%d 字节",filesize)
print(str)

gpio_cfg(0, 1)                        --配置模式D0 = 1-GPIO_OUT
gpio_write(0, 1)                      --设置输出D0 = 1

--配置SPI时钟6.25MHz,空闲时SCK为0,上升沿采集数据
spi_bus("init", 4, 0, 0)

offset = 0
-- 第1个参数是路径,第2个参数的偏移地址,第3个参数读取大小
-- 返回值bytes表示读取的字节数,bin表示都回的数据
bytes, bin = f_read(filepath, 0, 64)


-- 读取数据为0,表示传输完毕
while(bytes > 0)
do
    -- 将地址转换成四个字节   
    byte0 = ((offset >> 0) & 0xFF)
    byte1 = ((offset >> 8) & 0xFF)
    byte2 = ((offset >> 16) & 0xFF)
    byte3 = ((offset >> 24) & 0xFF)

    -- 发送固件数据给目标板
    -- 固定每次发送64个字节,前5个字节其它用途: 写指令 + 地址

    str_offset2 = string.format("%c%c%c%c%c", 2, byte3, byte2, byte1, byte0)

    if((69 - bytes - 5) ~= 0) then
        str_offset = string.format("%02d", 69 - bytes - 5)
        str_offset1 = string.format("%"..str_offset.."s", "A")
        str = str_offset2..bin..str_offset1
    else
        str = str_offset2..bin
    end

    --发送二进制字符串
    gpio_write(0, 0)                 --设置输出D0 = 0
    spi_bus("send", str)     
    gpio_write(0, 1)                 --设置输出D0 = 1

    delayms(5)

    offset = offset + bytes
    bytes, bin = f_read(filepath, offset, 64)  -- 继续读取数据

    if(bytes ~= 0) then                       -- 读取不为0,打印发送的总字节数
        print("Next send addr:", offset)
    end
end

print(" Finish -) ", offset)

发送的二进制数据:
image.png

有三组 64字节,kingst 看到的波形:
image.png

其中第一组 64字节,展开看到的波形:
image.png


发生以上错误后,将 h7-tools 断电重插入usb,然后 按前面描述的操作流程再走一遍,发出的数据 就能对了,这是为什么,感觉h7-tools 工具不是很稳定





回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-16 12:08:12 | 显示全部楼层

h7-tools 工具断电重插时, 上位机工具没有关闭 。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-1-16 12:39:35 | 显示全部楼层
ug82 发表于 2023-1-16 12:06
遇见一个问题, 每次第 一次打开 h7-tools,运行脚本,用 kingst 抓波形看到 h7-tools 发出的 spi 数据 总 ...


1、这个跟TOOL稳定性没有关系,TOOL的SPI是硬件发送的,只要你的数据对,他就不会出错,大概率你的测试代码执行逻辑有问题。
2、使用这个LUA,无需操作操作那个SPI硬件界面,仅需这个LUA即可。
3、最后就是这种SPI通信,不管是你接外设还是双机,一定要有合理的应答,或者等待上次发送完成的机制。像操作SPI Flash,都有等待本次完成的操作。其它外设或者双机通信也一样。

另外就是直接弄个SPI从机接收数据打印出来,别用这个分析仪转包,有时候抓包并不好用。

还是有问题的话,把你的bin文件上传上来,我给你SPI双机通信打印展示下。
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-16 13:08:48 | 显示全部楼层
2、使用这个LUA,无需操作操作那个SPI硬件界面,仅需这个LUA即可。
=> 那 SPI IO 电压 1.8v 再 Lua 中可以设置吗 ?通过启动总线,主要是为了设置 IO 电压为 1.8v.

3、最后就是这种SPI通信,不管是你接外设还是双机,一定要有合理的应答,或者等待上次发送完成的机制。像操作SPI Flash,都有等待本次完成的操作。其它外设或者双机通信也一样。
另外就是直接弄个SPI从机接收数据打印出来,别用这个分析仪转包,有时候抓包并不好用。
=> 发送完了,后面有 5ms 的延时。 我的 spi_slave 是 FPGA,是因为 FPGA内部抓到的 spi 数据就不对,所以从用 kingst 确认发出来的数据。kingst抓到的和 FPGA内部抓到的是一致的。

附件是 发送的 bin。放置到 h7_tools指定目录时改名为了 app.bin

app_o.bin

192 Bytes, 下载次数: 1

回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-16 13:16:55 | 显示全部楼层
另抓包看到,有时 cmd + Addr 字段就是不脚本中填了数,而不只是数据字段才错(之前怀疑是从 存储中读取的 bin 出错,看来不是)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-1-16 14:09:56 | 显示全部楼层
ug82 发表于 2023-1-16 13:08
2、使用这个LUA,无需操作操作那个SPI硬件界面,仅需这个LUA即可。
=> 那 SPI IO 电压 1.8v 再 Lua 中可以 ...

1、有API可以设置。
image.png

2、延迟不行,必须要有应答才可以,延迟不能保存传输已经完成。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-1-16 14:11:29 | 显示全部楼层
ug82 发表于 2023-1-16 13:16
另抓包看到,有时 cmd + Addr 字段就是不脚本中填了数,而不只是数据字段才错(之前怀疑是从 存储中读取的  ...

下面采用楼主位的方法,使用我们TOOL和我们H7板子双机通信,没问题。
测试效果:

QQ图片20230116141146.png


硬件平台测试:

image.png

回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-16 15:23:23 | 显示全部楼层
eric2013 发表于 2023-1-16 14:09
1、有API可以设置。

h7-tools 断电重启后,第一次调用 set_tvcc(1.8) 之后,spi 发出来的信号依然是 3.3V;不断电第二次执行才是1.8 v;

另外h7-tools 断电重启后,在 spi 页面下,设置为 1.8v,点击 启动总线,配置 SPI,spi 信号也是 3.3v;
h7-tools 断电重启后,需要先设置 3.3v 启动总线,再设置1.8v 启动总线,配置 SPI,这样每次SPI发出来的信号才能稳定是1.8V。 将这样的操作加到 lua 当中,却依然是不行,也要执行第二遍 lua脚本的时候信号才是 1.8v。

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-1-16 15:45:07 | 显示全部楼层
ug82 发表于 2023-1-16 15:23
h7-tools 断电重启后,第一次调用 set_tvcc(1.8) 之后,spi 发出来的信号依然是 3.3V;不断电第二次执行 ...

没问题啊,这个是我这里的测试,手头的两个TOOL都帮你测试了

(1)我插拔USB线,上电后默认是3.3V的
(2)然后我执行LUA,设置位1.8,看TVCC和CS片选都会是1.8V,没问题。

你那边不行,就先配置两次用着,等公司初八开工后,可以联系我们旺旺硬件售后处理。

动态图GIF,左下角是USB连接状态:



硬件测试接线:

CH1测量的TVCC,CH2测量的CS片选


image.png




回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-16 18:20:29 | 显示全部楼层
eric2013 发表于 2023-1-16 15:45
没问题啊,这个是我这里的测试,手头的两个TOOL都帮你测试了

(1)我插拔USB线,上电后默认是3.3V的

要把 set_tvcc 和其它结合起来一起跑,spi输出接示波器看。我这单独像 gif 这样测试,看起来也是正常的。

我是以上 脚本加上红色一条。

local str_offset2
local filesize

set_tvcc(1.8)                        -- 设置 1.8v
-------------------------------------------------------
--   浏览烧录文件夹下存的文件
-------------------------------------------------------
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-1-16 20:41:21 | 显示全部楼层
ug82 发表于 2023-1-16 18:20
要把 set_tvcc 和其它结合起来一起跑,spi输出接示波器看。我这单独像 gif 这样测试,看起来也是正常的。 ...


帮你测试了,也没问题。简单的测试的SCK时钟。测试方法同上。

你那边还有问题的,建议等初八开工后,联系我们公司旺旺硬件售后处理吧。我这边已经尽最大努力帮你了。

还有一点,你那边设置完毕TVCC后,加个100ms延迟是不是正常。

image.png

动态GiF如下:






回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-1-16 22:43:08 | 显示全部楼层
eric2013 发表于 2023-1-16 20:41
帮你测试了,也没问题。简单的测试的SCK时钟。测试方法同上。

你那边还有问题的,建议等初八开工后 ...

好的,多谢,辛苦了
回复

使用道具 举报

8

主题

44

回帖

68

积分

初级会员

积分
68
发表于 2023-4-27 17:39:07 | 显示全部楼层
为啥 spi 接口没有 cs 引脚?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-4-27 18:53:16 | 显示全部楼层
luis_13 发表于 2023-4-27 17:39
为啥 spi 接口没有 cs 引脚?

CLK时钟同步即可,你也可以将CS片选整上,进行LUA控制。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 5 天前 | 显示全部楼层
这个列子在2.2.26版本没有 这个在那个版本里面有了 是否直接拷贝到2.2.26里面就可以
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 5 天前 | 显示全部楼层
sczh01 发表于 2024-10-27 09:20
这个列子在2.2.26版本没有 这个在那个版本里面有了 是否直接拷贝到2.2.26里面就可以

按照这个帖子操作说明一步一步执行即可

TOOL端的LUA和目标板版的bootloader,在帖子里面都提供了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-1 07:23 , Processed in 0.602172 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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