硬汉嵌入式论坛

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

[LUA教程] H7-TOOL的LUA小程序教程第10期:SPI总线主机模式操作说明V1.0(2023-12-03)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
发表于 2023-12-3 09:56:15 | 显示全部楼层 |阅读模式
LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。

TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。

功能特性:

1、主机采用硬件SPI实现,最高速度50MHz,TOOL本身是支持100MHz的,但由于带双向IO电平控制,所以最高速设置为50MHz
2、IO电平范围支持1.2V-5.0V。
3、支持波形展示。

LUA函数说明:

1、主机初始化函数

spi_bus("init", 参数1, 参数2, 参数3)

参数1: 配置SPI速度
0表示速度390.625K
1表示速度781.25K
2表示速度1.5625M
3表示速度3.125M
4表示速度6.25M
5表示速度12.5M
6表示速度25M
7表示速度50M

参数2:配置SPI时钟相位
0表示上升沿采集数据
1表示下降沿采集数据

参数3:时钟极性
0表示空闲时SCK时钟是低电平
1表示空闲时SCK时钟是高电平

比如配置时钟速度50MHz,上升沿采集,SCK空闲时低电平 ,可以单独LUA调用spi_bus("init", 7, 0, 0)

也可以使用TOOL上位机操作:

1.png

上位机这里调用的函数是SPI_Init(7, 0, 0),这是因为上位机界面为了方便操作对函数spi_bus("init", 参数1, 参数2, 参数3)做了封装,原始定义位于上位机软件包路径h7toolPC_release\USBBus里面的usb_bus.lua文件中

2、主机读数据函数

返回值 = spi_bus("recive", 参数)
返回值:读取数据
参数   :要读取的数据个数

比如要读取10个数据,就可以rd = spi_bus("recive", 10),可以单独LUA调用

也可以上位机操作

2.png

上位机这里调用的函数是SPI_ReadData(0x00, 10, 16),原始定义位于上位机软件包路径h7toolPC_release\USBBus里面的usb_bus.lua文件中,是对函数spi_bus("recive", 参数)做了封装

3、主机写数据函数

spi_bus("send", 参数)

参数:发送的数据,可以发送字符串比如"12345678", 如果要发送实际数值,可以转移字符比如"\x00\x12\x34\x56"

比如要写10个数据,就可以spi_bus("send", "1234567890") ,可以单独LUA调用

也可以上位机操作

12.png

上位机这里调用的函数是SPI_WriteData(0x00, "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99"),原始定义位于上位机软件包路径h7toolPC_release\USBBus里面的usb_bus.lua文件中,是对函数spi_bus("send", 参数)做了封装

3、主机卸载函数

spi_bus("uninit")

直接调用函数spi_bus("uninit")即可

硬件接线连接:

SPI主机的引脚定义如下:
D0 : CS0 片选0
D1 : CS1 片选1
D5 : SCK 时钟
D2 : SDO MOSI
D3 : SDI MISO

接目标板的话,接线方式如下,大家可以根据需要选择是否接片选,不接也可以使用。




使用案例举例
1、H7-TOOL的SPI控制器主从机操作说明,20cm杜邦线接线方式,SPI全双工25MHz通信速度(2022-04-10)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=111864

2、H7-TOOL的SPI接口方式脱机烧录操作方法,已经发布(2022-07-27)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=114301










回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
 楼主| 发表于 2023-12-4 00:17:29 | 显示全部楼层
更新完毕
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2024-3-29 16:06:36 | 显示全部楼层
SPI是全双工的,不能支持同时读和写吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
 楼主| 发表于 2024-3-30 09:36:55 | 显示全部楼层
HeyGoda 发表于 2024-3-29 16:06
SPI是全双工的,不能支持同时读和写吗?

支持,这里所有的读写API吗,本质都是硬件全双工读写的,我们这里只是用了全双工的读取的内容或者写入的内容展示给大家,

这里的用法更符合实际设备驱动,比如SPI Flash等,几乎所有的SPI外设都是这种,写命令,然后读写操作的用法。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2024-4-1 11:30:37 | 显示全部楼层
eric2013 发表于 2024-3-30 09:36
支持,这里所有的读写API吗,本质都是硬件全双工读写的,我们这里只是用了全双工的读取的内容或者写入的 ...

我实际测试了rd = spi_bus("sendrecive", data, num)函数,没法同时读写呢,这个模式当前是支持的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
 楼主| 发表于 2024-4-1 11:36:50 | 显示全部楼层
HeyGoda 发表于 2024-4-1 11:30
我实际测试了rd = spi_bus("sendrecive", data, num)函数,没法同时读写呢,这个模式当前是支持的吗?

这个是因为我们LUA API端没有将发送和接收数据同时开放出来供大家使用。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 20:56 , Processed in 0.201084 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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