版本: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;
}