T5模组 SPI发送丢失数据

Wi-Fi 设备、Wi-Fi 低功耗设备、Wi-Fi BLE 双模设备、Ethernet设备、Ethernet+Wi-Fi设备等
Post Reply
Gzz_lin
Posts: 11

版本:3.12.8
软件控制CS,发送后立刻拉高数据丢失,发4位只有三位,附件是逻辑分析仪截图,以下是完整代码:

Code: Select all

#include "hly_flash.h"
#include "tkl_spi.h"
#include "tuya_cloud_com_defs.h"
#include "tal_log.h"


#define SOC_ADDR_OFFSET          (0)
#define SOC_AON_GPIO_REG_BASE    (0x44000400 + SOC_ADDR_OFFSET)
#define GPIO_OUTPUT_HIGH		0x2
#define GPIO_OUTPUT_LOW			0x0

#define FLASH_SPI_ID   TUYA_SPI_NUM_1
#define FLASH_SPI_FREQ 1000000
#define FLASH_CS_PIN  TUYA_GPIO_NUM_3 //

#define FLASH_CS_H() do { \
    *((volatile unsigned long *) (SOC_AON_GPIO_REG_BASE+(FLASH_CS_PIN)*4)) = GPIO_OUTPUT_HIGH; \
} while(0)
#define FLASH_CS_L() do { \
    *((volatile unsigned long *) (SOC_AON_GPIO_REG_BASE+(FLASH_CS_PIN)*4)) = GPIO_OUTPUT_LOW; \
} while(0)

OPERATE_RET hly_flash_init()
{
    OPERATE_RET rt=0;

TUYA_SPI_BASE_CFG_T cfg = {
    .mode = TUYA_SPI_MODE3,
    .freq_hz = FLASH_SPI_FREQ,
    .databits = TUYA_SPI_DATA_BIT8,
    .bitorder = TUYA_SPI_ORDER_MSB2LSB,
    .role = TUYA_SPI_ROLE_MASTER,
    .type = TUYA_SPI_SOFT_TYPE,
    .spi_dma_flags=1
};
rt= tkl_spi_init(FLASH_SPI_ID,&cfg);
TUYA_GPIO_BASE_CFG_T gpio_cfg=
{
    .direct=TUYA_GPIO_OUTPUT,
    .mode=TUYA_GPIO_PUSH_PULL,
    .level=TUYA_GPIO_LEVEL_LOW
};
tkl_gpio_init(FLASH_CS_PIN, &gpio_cfg);
return rt;
}



OPERATE_RET hly_flash_read(UINT32_T addr,UINT8_T* databuffer,UINT32_T len)
{
    UINT8_T cmds[4];
    OPERATE_RET rt=0;
    cmds[0]=0x0B;
	cmds[1]=((addr>>16)&0xFF);
	cmds[2]=((addr>>8)&0xFF);
	cmds[3]=(addr&0xFF);
    FLASH_CS_L();
    tkl_spi_send(FLASH_SPI_ID,&cmds,4);
    //tal_system_sleep(100);
    rt=tkl_spi_recv(FLASH_SPI_ID,databuffer,len);
    FLASH_CS_H();
    return rt;
}

Attachments
微信图片_20250526173224.png

Tags:
Gzz_lin
Posts: 11

Re: T5模组 SPI发送丢失数据

tkl_spi_send(FLASH_SPI_ID,&cmds,4);这后面直接拉高CS不行,直接进行接收也不行,需要延迟才能发送完整数据

一个网友
Posts: 18
Location: ⭐星星⭐

Re: T5模组 SPI发送丢失数据

您好,
这个是硬件spi,cs由底层硬件控制,不能上层操作的

努力写bug……

Post Reply