CH582 spi 讀 lora寄存器錯(cuò)位

比如讀0x42讀lora芯片的版本好 返回的是下一個(gè)寄存器的值。讀0x41才能返回0x42的值

類似的代碼在stm32上正常不會(huì)錯(cuò)位


***********? main **************

#if 1
? /* SPI 0 */
? GPIOA_SetBits( GPIO_Pin_12 );
? GPIOA_ModeCfg( GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14, GPIO_ModeOut_PP_5mA );

? // lora_reset perform reset
????? GPIOA_ResetBits(LORA_RESET);

????? DelayMs( 10 );
????? GPIOA_SetBits(LORA_RESET);

????? DelayMs( 10 );
????? SPI0_DataMode(Mode0_HighBitINFront);
? SPI0_MasterDefInit();

? while( 1 )
? {
??? uint8_t version = LORA_singleTransfer(0x42,0x00);
??? char info[20];
??? sprintf(info,"0x%02x \n",version);
????? PRINT(info);
????? DelayMs(1000);
? }


**************************************


uint8_t LORA_singleTransfer(uint8_t address, uint8_t value)
{
? uint8_t response;

? GPIOA_ResetBits( GPIO_Pin_12 );
? SPI0_MasterSendByte( address );
? SPI0_MasterSendByte( value );
? response = SPI0_MasterRecvByte();
? GPIOA_SetBits( GPIO_Pin_12 );

? return response;
}

582的SPI只支持模式0和模式3.
有條件可以用示波器或者邏輯分析儀看下SPI的波形,看看數(shù)據(jù)發(fā)送是否異常。
另外如果不具備觀測(cè)波形的條件,可以把SPI的時(shí)鐘先調(diào)慢,試試效果,硬件電路上如果串了電阻啥 的,時(shí)鐘調(diào)慢可能也可以解決問題。


spi相當(dāng)于8位環(huán)形移位寄存器,發(fā)送8位數(shù)據(jù),同時(shí)收到8位數(shù)據(jù),收發(fā)是兩個(gè)數(shù)據(jù)寄存器,比如R8_DATA_REG =被發(fā)送的數(shù)據(jù),同時(shí)讀回收到的數(shù)據(jù),return R8_DATA_REG


字節(jié)傳輸(全雙工)

uint8_t ch57x_hal_spi_transfer(uint8_t data) {

? ? R8_SPI0_BUFFER = data;

? ? while( !(R8_SPI0_INT_FLAG & RB_SPI_FREE) );

? ? return ( R8_SPI0_BUFFER );

}

參考這個(gè)



只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频