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) {
}
}
`
@snn New0001. rar