void UserMain(void)
{
uint8_t key=0;
IINCHIP_WRITE( 0x000000, 0x01);//00000101
printf("接收: %X", IINCHIP_READ(0x000000));
}
uint8_t SPI_FLASH_SendByte(uint8_t byte)
//master_spi_send_data(int clk, int type)
{
uint8_t rec = 0;
wm_spi_ck_config(WM_IO_PB_15);
wm_spi_di_config(WM_IO_PB_16);
wm_spi_do_config(WM_IO_PB_17);
tls_gpio_cfg(WM_IO_PB_14, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);/* cs */
tls_spi_init();
tls_spi_trans_type(SPI_DMA_TRANSFER);
tls_spi_setup(TLS_SPI_MODE_3, TLS_SPI_CS_LOW, TLS_SPI_FCLK_MAX);
tls_gpio_write(WM_IO_PB_14, 0);
tls_spi_write(&byte, 1);
tls_spi_read(&rec, 1);
tls_gpio_write(WM_IO_PB_14, 1);
return rec;
}
uint8_t SPI_FLASH_ReadByte(void) {
return SPI_FLASH_SendByte(0xFF);
}
/**
*@brief 从w5500读出一个8位数据
*@param addrbsb: 写入数据的地址
*@param data:从写入的地址处读取到的数据
*@return 无
*/
uint8_t IINCHIP_READ(uint32 addrbsb)
{
uint8_t data = 0;
tls_gpio_write(WM_IO_PB_14, 0);
IINCHIP_SpiSendData( (addrbsb & 0x00FF0000)>>16);
IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8);
IINCHIP_SpiSendData( (addrbsb & 0x000000F8)) ;
data = IINCHIP_SpiSendData(0x00);
tls_gpio_write(WM_IO_PB_14, 1);
return data;
}
/**
*@brief 写入一个8位数据到W5500
*@param addrbsb: 写入数据的地址
*@param data;写入的8位数据
*@return 无
*/
void IINCHIP_WRITE( uint32 addrbsb, uint8_t data)
{
tls_gpio_write(WM_IO_PB_14, 0);
IINCHIP_SpiSendData( (addrbsb & 0x00FF0000)>>16);
IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8);
IINCHIP_SpiSendData( (addrbsb & 0x000000F8) + 4);
IINCHIP_SpiSendData(data);
tls_gpio_write(WM_IO_PB_14, 1);
}
/**
*@brief W800 SPI读写8位数据
*@param dat写入的8位数据
*@return 无
*/
uint8_t IINCHIP_SpiSendData(uint8_t dat)
{
return(SPI_FLASH_SendByte(dat));
}
W800做主
@snn 写个初始化接口,IO初始化以及SPI初始化调用一遍就行了,初始化时不用调用tls_spi_init接口,底层已经调用过了。发送时,拉低片选,调用tls_spi_write接口,拉高片选。接收时,拉低片选,调用tls_spi_read接口,拉高片选。另外贴代码时,点上面的代码图标,发出来的代码就不会乱了。
@snn 你的片选拉的很乱。
接收到的数据仍然不对呢,球球指导。
`void UserMain(void)
{
}
define SPI_DATA_LEN 4
define SPI_CLOCK 1000000 // 1 MHz
void spi_init(void)
{
}
uint8_t SPI_FLASH_SendByte(uint8_t byte)
{
}
uint8_t SPI_FLASH_ReadByte(void) {
}
/**
*@brief 从w5500读出一个8位数据
*@param addrbsb: 写入数据的地址
*@param data:从写入的地址处读取到的数据
*@return 无
*/
uint8_t IINCHIP_READ(uint32 addrbsb)
{
}
/**
*@brief 写入一个8位数据到W5500
*@param addrbsb: 写入数据的地址
*@param data;写入的8位数据
*@return 无
*/
void IINCHIP_WRITE( uint32 addrbsb, uint8_t data)
{
tls_gpio_write(WM_IO_PB_14, 1);
}
/**
*@brief W800 SPI读写8位数据
*@param dat写入的8位数据
*@return 无
*/
uint8_t IINCHIP_SpiSendData(uint8_t dat)
{
}
`
@abcd 接收到的数据仍然不对呢,球球指导。
`void UserMain(void)
{
}
void spi_init(void)
{
}
uint8_t SPI_FLASH_SendByte(uint8_t byte)
{
}
uint8_t SPI_FLASH_ReadByte(void) {
}
/**
*@brief 从w5500读出一个8位数据
*@param addrbsb: 写入数据的地址
*@param data:从写入的地址处读取到的数据
*@return 无
*/
uint8_t IINCHIP_READ(uint32 addrbsb)
{
}
/**
*@brief 写入一个8位数据到W5500
*@param addrbsb: 写入数据的地址
*@param data;写入的8位数据
*@return 无
*/
void IINCHIP_WRITE( uint32 addrbsb, uint8_t data)
{
}
/**
*@brief W800 SPI读写8位数据
*@param dat写入的8位数据
*@return 无
*/
uint8_t IINCHIP_SpiSendData(uint8_t dat)
{
}
`
@snn 初始化配置把模式3改成模式0。然后你的时序得按照W5500的来,找个W5500的手册,看下读写时序是什么样的,用逻辑分析,抓SPI波形,先把时序对上了。
@abcd 不知道那里的问题时序图中时钟一直不正确呢。
`void UserMain(void)
{
#if DEMO_CONSOLE
#endif
while(1){
}
![image.png image.png](/uploads/20240716/1fd55d56d4c79a5ee836630ba976932e.png)
}
`
@snn New0001.rar