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