4 Commits

Author SHA1 Message Date
518eb9f134 [Mod] 优化方案一, 433MHz工作正常 2024-08-07 21:25:57 +08:00
de1285ff41 [Mod] 调相频率868 2024-08-07 15:10:29 +08:00
b9f5afd78e [Mod] 优化展示效果
1. start_task中新增delay,延后打印'#';
2024-08-06 09:57:57 +08:00
e7c70664d6 [Mod] MBL 使用NCVI->ICER 清除所有已使用的中断 2024-08-05 10:09:09 +08:00
11 changed files with 654 additions and 48 deletions

View File

@ -149,6 +149,274 @@
*****************************************************************************/ *****************************************************************************/
#if ( PRODUCT_FREQUENCY == CM2310A_868MHZ) #if ( PRODUCT_FREQUENCY == CM2310A_868MHZ)
const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = {
0x2A,
0x42,
0x00,
0xAA,
0x04,
0x00,
0x00,
0x00,
0x00,
0x00,
0x64,
0xD1,
0xCE,
0x00,
0x00,
0x00,
0x00,
0x00,
0x64,
0xD1,
0xCE,
0x1F,
0x00,
0x01,
0x00,
0x00,
0x00,
0x00,
0x2D,
0x00,
0x00,
0x00,
0x2D,
0x41,
0x00,
0x00,
0xFF,
0xFF,
0x00,
0x00,
0x05,
0x80,
0x00,
0x00,
0x08,
0x00,
0x00,
0x00,
0x00,
0x1F,
0x07,
0x00,
0x00,
0x00,
0x00,
0xE4,
0x20,
0x1A,
0x60,
0x08,
0x00,
0xAA,
0x00,
0xE2,
0x82,
0x38,
0x00,
0xD0,
0xE0,
0x80,
0x00,
0x41,
0x00,
0x01,
0x00,
0x02,
0x00,
0x00,
0x03,
0x04,
};
const uint8_t g_cmt2310a_page1[CMT2310A_PAGE1_SIZE] = {
0x10,
0x06,
0x00,
0xFF,
0x00,
0xCD, // vRadioTcxoDrvSel 接收设置的将0xcd变为了0x0d
0x0E,
0x20,
0x50,
0x87,
0x31,
0x5B,
0x08,
0x38,
0xFF,
0x00,
0x6C,
0x00,
0x00,
0x08,
0xB4,
0x04,
0x56,
0xE0,
0x20,
0x08,
0x01,
0x10,
0x11,
0x00,
0x91,
0x7F,
0x00,
0x18,
0x00,
0x00,
0x1F,
0xE4,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xC0,
0x6C,
0x00,
0x80,
0x98,
0x6B,
0x00,
0x80,
0x0F,
0x64,
0x06,
0x02,
0x04,
0x56,
0x00,
0x36,
0x05,
0x20,
0xC8,
0x63,
0xA1,
0xFA,
0x02,
0x58,
0x40,
0x54,
0x74,
0xD0,
0x0F,
0x01,
0x1B,
0xE6,
0x54,
0x0C,
0x09,
0xE2,
0x33,
0x04,
0x01,
0xA5,
0x06,
0x0F,
0x12,
0x4C,
0x00,
0x00,
0xF6,
0x00,
0x00,
0x00,
0x18,
0x81,
0x00,
0x00,
0x47,
0x12, //0x67寄存器ANT_DIVERSITY_MODE设置电线分集的接口会修改它
0x25,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
/* [CMT page2] */
const uint8_t g_cmt2310a_page2[CMT2310A_PAGE2_SIZE] = {
0x00,
0x01,
0x02,
0x03,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
#if 0
/* [CMT page0] */ /* [CMT page0] */
const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = { const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = {
0x12, 0x12,
@ -350,3 +618,4 @@ const uint8_t g_cmt2310a_page1[CMT2310A_PAGE1_SIZE] = {
}; };
#endif #endif
#endif

View File

@ -21,6 +21,8 @@
#include "board.h" #include "board.h"
#define GET_CHIP_INFO_RETRY_MAX 10
uint8_t rf_rxbuffer[200]; uint8_t rf_rxbuffer[200];
uint8_t rf_rxsize; uint8_t rf_rxsize;
uint8_t radio_rece_data_flag; uint8_t radio_rece_data_flag;
@ -29,28 +31,50 @@ extern uint32_t g_chip_id;
void Ebyte_E48x_Init( void ) void Ebyte_E48x_Init( void )
{ {
int ret;
uint8_t chip_state = 0;
uint32_t fail_retry = 0;
boolean_t is_chip_cmt2310 = FALSE;
vSpiMasterInit();
init_prepare:
/* Step1 */ /* Step1 */
vRadioPowerUp(); // Release RST(GPIO5) g_chip_id = lRadioChipVersion();
vRadioSetAntSwitch(FALSE, FALSE); // Disable GPIO0 & GPIO1 as antenna switch control chip_state = bRadioGetState();
vRadioSpiModeSel(FALSE); // SPI 4-Wire mode // OSAL_LOGD("Debug, got information Version[%#X] State[%#X].", g_chip_id, chip_state);
is_chip_cmt2310 = ((g_chip_id & 0x00FFFF00) == 0x00231000);
if (is_chip_cmt2310 && (chip_state == CMT2310A_STATE_IS_READY)) {
printf("Infor, CMT2310 already in State[READY], so skip initialization.");
goto init_end;
}
else if (is_chip_cmt2310 && (!chip_state || chip_state & 0x80)) { // Valid mode, except IDLE and READY
printf("Debug, initialize CMT2310 right now with current State[%#X].", chip_state);
goto init_run;
}
else if (fail_retry++ >= GET_CHIP_INFO_RETRY_MAX) {
printf("Error, get the information of CMT2310 failed with Chip-ID[%#X] State[%#X].", g_chip_id, chip_state);
return -1;
}
else if (fail_retry == 1) {
vRadioPowerUp(); // Release RST(GPIO5)
delay1ms(20);
}
/* Step2 */ /* Step2 */
g_chip_id = lRadioChipVersion(); vRadioSoftReset(); // Software reset
if(0x00231000 != (g_chip_id & 0x00FFFF00)) { vRadioBoot(); // Boot CMT2310 core
EBYTE_LOG("[%s|%u] Error, dismatch Chip-ID[%#x](!=0x231000).\r\n", __FUNCTION__, __LINE__, g_chip_id); delay1ms(50);
return;
}
EBYTE_LOG("[%s|%u] Info, Link Device:E48-XXXM20S.\r\n", __FUNCTION__, __LINE__);
/* Step3 */ goto init_prepare;
if (bRadioGetState() == CMT2310A_STATE_IS_READY) { init_run:
EBYTE_LOG("[%s|%u] Infor, CMT2310 already in State[READY], so skip initialization.\r\n", __FUNCTION__, __LINE__); /* Step3~6 */
return;
}
EBYTE_LOG("[%s|%u] Info, goto initialize E48-XXXM20S.\r\n", __FUNCTION__, __LINE__);
/* Step4 */
vRadioInit(); vRadioInit();
init_end:
return ret;
} }
void Ebyte_E48x_SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout ) void Ebyte_E48x_SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout )

View File

@ -430,6 +430,11 @@ void vRadioRegPageSel( uint8_t page_sel )
} }
} }
void vRadioBoot( void )
{
bSpiWriteByte( CMT2310A_CTL_REG_00, CMT2310A_REBOOT );
}
/****************************** /******************************
**Name: vRadioPowerUpBoot **Name: vRadioPowerUpBoot
**Func: Radio power up boot start **Func: Radio power up boot start

View File

@ -15,7 +15,7 @@
#define CM2310A_868MHZ 2 #define CM2310A_868MHZ 2
#define CM2310A_915MHZ 3 #define CM2310A_915MHZ 3
#define PRODUCT_FREQUENCY CM2310A_410MHZ//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5> #define PRODUCT_FREQUENCY CM2310A_433MHZ//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
#include "radio_spi.h" #include "radio_spi.h"
#include "CMT2310A_def.h" #include "CMT2310A_def.h"
@ -83,7 +83,6 @@ extern void vRadioXoWaitCfg( uint8_t div_sel );
extern void delay1ms(uint16_t cnt); extern void delay1ms(uint16_t cnt);
extern void delay10us(uint32_t cnt); extern void delay10us(uint32_t cnt);
void vRadioBoot( void );
#endif #endif

View File

@ -76,6 +76,9 @@ static void jump_to_main_image(uint32_t msp, uint32_t reset)
img_reset = (img_fptr_t)reset; img_reset = (img_fptr_t)reset;
// __disable_irq(); // __disable_irq();
for (int i = 0; i < sizeof(NVIC->ICER) / 4; i++)
NVIC->ICER[i] = ~(0UL);
#if defined(__ARM_ARCH_8M_MAIN__) || defined(__ARM_ARCH_8M_BASE__) #if defined(__ARM_ARCH_8M_MAIN__) || defined(__ARM_ARCH_8M_BASE__)
/* Restore the Main Stack Pointer Limit register's reset value /* Restore the Main Stack Pointer Limit register's reset value
* before passing execution to runtime firmware to make the * before passing execution to runtime firmware to make the

View File

@ -59,6 +59,7 @@ OF SUCH DAMAGE.
#include "uart.h" #include "uart.h"
#include "console.h" #include "console.h"
#include "flash_api.h" #include "flash_api.h"
#include <radio_phy.h>
#ifdef CONFIG_TELNET_SERVER #ifdef CONFIG_TELNET_SERVER
#include "telnet_main.h" #include "telnet_main.h"
@ -1093,6 +1094,8 @@ static void cmd_boot(int argc, char **argv)
uint32_t arm_vector[2] = {0}; uint32_t arm_vector[2] = {0};
uint32_t boot_idx = 0, image_offset = 0, version; uint32_t boot_idx = 0, image_offset = 0, version;
bRadioGoStandby();
if (argc > 2) { if (argc > 2) {
DEBUGPRINT("jump_bml: command format error!\r\n"); DEBUGPRINT("jump_bml: command format error!\r\n");
goto Usage; goto Usage;

View File

@ -33,6 +33,7 @@ OF SUCH DAMAGE.
*/ */
/*============================ INCLUDES ======================================*/ /*============================ INCLUDES ======================================*/
#include "radio_hal.h"
#include "wrapper_freertos.h" #include "wrapper_freertos.h"
#include "wrapper_os.h" #include "wrapper_os.h"
#include "debug_print.h" #include "debug_print.h"
@ -145,12 +146,14 @@ void start_task(void *p_arg)
const char *filename; const char *filename;
#endif // CONFIG_GY3513 #endif // CONFIG_GY3513
wifi_management_init(); // wifi_management_init();
#ifdef CONFIG_FATFS_SUPPORT #ifdef CONFIG_FATFS_SUPPORT
rcu_periph_clock_enable(RCU_CRC); rcu_periph_clock_enable(RCU_CRC);
fatfs_mk_mount(); fatfs_mk_mount();
#endif #endif
delay1ms(100);
#ifdef CONFIG_CONSOLE_ENABLE #ifdef CONFIG_CONSOLE_ENABLE
console_init(); console_init();
#else #else
@ -197,11 +200,11 @@ int main(void)
} }
#endif // CONFIG_TASK_LED #endif // CONFIG_TASK_LED
if (NULL == sys_task_create(NULL, (const uint8_t *)"start_task", NULL, START_TASK_STK_SIZE, 0, START_TASK_PRIO, start_task, NULL)) { if (NULL == sys_task_create(NULL, (const uint8_t *)"sub1g_task", NULL, START_TASK_STK_SIZE, 0, START_TASK_PRIO, sub1g_task, NULL)) {
DEBUGPRINT("ERROR: create start task failed\r\n"); DEBUGPRINT("ERROR: create start task failed\r\n");
} }
if (NULL == sys_task_create(NULL, (const uint8_t *)"sub1g_task", NULL, START_TASK_STK_SIZE, 0, START_TASK_PRIO, sub1g_task, NULL)) { if (NULL == sys_task_create(NULL, (const uint8_t *)"start_task", NULL, START_TASK_STK_SIZE, 0, START_TASK_PRIO, start_task, NULL)) {
DEBUGPRINT("ERROR: create start task failed\r\n"); DEBUGPRINT("ERROR: create start task failed\r\n");
} }

View File

@ -149,6 +149,274 @@
*****************************************************************************/ *****************************************************************************/
#if ( PRODUCT_FREQUENCY == CM2310A_868MHZ) #if ( PRODUCT_FREQUENCY == CM2310A_868MHZ)
const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = {
0x2A,
0x42,
0x00,
0xAA,
0x04,
0x00,
0x00,
0x00,
0x00,
0x00,
0x64,
0xD1,
0xCE,
0x00,
0x00,
0x00,
0x00,
0x00,
0x64,
0xD1,
0xCE,
0x1F,
0x00,
0x01,
0x00,
0x00,
0x00,
0x00,
0x2D,
0x00,
0x00,
0x00,
0x2D,
0x41,
0x00,
0x00,
0xFF,
0xFF,
0x00,
0x00,
0x05,
0x80,
0x00,
0x00,
0x08,
0x00,
0x00,
0x00,
0x00,
0x1F,
0x07,
0x00,
0x00,
0x00,
0x00,
0xE4,
0x20,
0x1A,
0x60,
0x08,
0x00,
0xAA,
0x00,
0xE2,
0x82,
0x38,
0x00,
0xD0,
0xE0,
0x80,
0x00,
0x41,
0x00,
0x01,
0x00,
0x02,
0x00,
0x00,
0x03,
0x04,
};
const uint8_t g_cmt2310a_page1[CMT2310A_PAGE1_SIZE] = {
0x10,
0x06,
0x00,
0xFF,
0x00,
0xCD, // vRadioTcxoDrvSel 接收设置的将0xcd变为了0x0d
0x0E,
0x20,
0x50,
0x87,
0x31,
0x5B,
0x08,
0x38,
0xFF,
0x00,
0x6C,
0x00,
0x00,
0x08,
0xB4,
0x04,
0x56,
0xE0,
0x20,
0x08,
0x01,
0x10,
0x11,
0x00,
0x91,
0x7F,
0x00,
0x18,
0x00,
0x00,
0x1F,
0xE4,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xC0,
0x6C,
0x00,
0x80,
0x98,
0x6B,
0x00,
0x80,
0x0F,
0x64,
0x06,
0x02,
0x04,
0x56,
0x00,
0x36,
0x05,
0x20,
0xC8,
0x63,
0xA1,
0xFA,
0x02,
0x58,
0x40,
0x54,
0x74,
0xD0,
0x0F,
0x01,
0x1B,
0xE6,
0x54,
0x0C,
0x09,
0xE2,
0x33,
0x04,
0x01,
0xA5,
0x06,
0x0F,
0x12,
0x4C,
0x00,
0x00,
0xF6,
0x00,
0x00,
0x00,
0x18,
0x81,
0x00,
0x00,
0x47,
0x12, //0x67寄存器ANT_DIVERSITY_MODE设置电线分集的接口会修改它
0x25,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
/* [CMT page2] */
const uint8_t g_cmt2310a_page2[CMT2310A_PAGE2_SIZE] = {
0x00,
0x01,
0x02,
0x03,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
#if 0
/* [CMT page0] */ /* [CMT page0] */
const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = { const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = {
0x12, 0x12,
@ -350,3 +618,4 @@ const uint8_t g_cmt2310a_page1[CMT2310A_PAGE1_SIZE] = {
}; };
#endif #endif
#endif

View File

@ -21,6 +21,8 @@
#include "board.h" #include "board.h"
#define GET_CHIP_INFO_RETRY_MAX 10
uint8_t rf_rxbuffer[200]; uint8_t rf_rxbuffer[200];
uint8_t rf_rxsize; uint8_t rf_rxsize;
uint8_t radio_rece_data_flag; uint8_t radio_rece_data_flag;
@ -29,28 +31,50 @@ extern uint32_t g_chip_id;
void Ebyte_E48x_Init( void ) void Ebyte_E48x_Init( void )
{ {
int ret;
uint8_t chip_state = 0;
uint32_t fail_retry = 0;
boolean_t is_chip_cmt2310 = FALSE;
vSpiMasterInit();
init_prepare:
/* Step1 */ /* Step1 */
vRadioPowerUp(); // Release RST(GPIO5) g_chip_id = lRadioChipVersion();
vRadioSetAntSwitch(FALSE, FALSE); // Disable GPIO0 & GPIO1 as antenna switch control chip_state = bRadioGetState();
vRadioSpiModeSel(FALSE); // SPI 4-Wire mode // OSAL_LOGD("Debug, got information Version[%#X] State[%#X].", g_chip_id, chip_state);
is_chip_cmt2310 = ((g_chip_id & 0x00FFFF00) == 0x00231000);
if (is_chip_cmt2310 && (chip_state == CMT2310A_STATE_IS_READY)) {
DEBUGPRINT("Infor, CMT2310 already in State[READY], so skip initialization.");
goto init_end;
}
else if (is_chip_cmt2310 && (!chip_state || chip_state & 0x80)) { // Valid mode, except IDLE and READY
DEBUGPRINT("Debug, initialize CMT2310 right now with current State[%#X].", chip_state);
goto init_run;
}
else if (fail_retry++ >= GET_CHIP_INFO_RETRY_MAX) {
DEBUGPRINT("Error, get the information of CMT2310 failed with Chip-ID[%#X] State[%#X].", g_chip_id, chip_state);
return -1;
}
else if (fail_retry == 1) {
vRadioPowerUp(); // Release RST(GPIO5)
delay1ms(20);
}
/* Step2 */ /* Step2 */
g_chip_id = lRadioChipVersion(); vRadioSoftReset(); // Software reset
if(0x00231000 != (g_chip_id & 0x00FFFF00)) { vRadioBoot(); // Boot CMT2310 core
DEBUGPRINT("[%s|%u] Error, dismatch Chip-ID[%#x](!=0x231000).\r\n", __FUNCTION__, __LINE__, g_chip_id); delay1ms(50);
return;
}
DEBUGPRINT("[%s|%u] Info, Link Device:E48-XXXM20S.\r\n", __FUNCTION__, __LINE__);
/* Step3 */ goto init_prepare;
if (bRadioGetState() == CMT2310A_STATE_IS_READY) { init_run:
DEBUGPRINT("[%s|%u] Infor, CMT2310 already in State[READY], so skip initialization.\r\n", __FUNCTION__, __LINE__); /* Step3~6 */
return;
}
DEBUGPRINT("[%s|%u] Info, goto initialize E48-XXXM20S.\r\n", __FUNCTION__, __LINE__);
/* Step4 */
vRadioInit(); vRadioInit();
init_end:
return ret;
} }
void Ebyte_E48x_SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout ) void Ebyte_E48x_SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout )

View File

@ -430,6 +430,11 @@ void vRadioRegPageSel( uint8_t page_sel )
} }
} }
void vRadioBoot( void )
{
bSpiWriteByte( CMT2310A_CTL_REG_00, CMT2310A_REBOOT );
}
/****************************** /******************************
**Name: vRadioPowerUpBoot **Name: vRadioPowerUpBoot
**Func: Radio power up boot start **Func: Radio power up boot start

View File

@ -15,7 +15,7 @@
#define CM2310A_868MHZ 2 #define CM2310A_868MHZ 2
#define CM2310A_915MHZ 3 #define CM2310A_915MHZ 3
#define PRODUCT_FREQUENCY CM2310A_410MHZ//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5> #define PRODUCT_FREQUENCY CM2310A_433MHZ//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
#include "radio_spi.h" #include "radio_spi.h"
#include "CMT2310A_def.h" #include "CMT2310A_def.h"
@ -83,6 +83,8 @@ extern void vRadioXoWaitCfg( uint8_t div_sel );
extern void delay1ms(uint16_t cnt); extern void delay1ms(uint16_t cnt);
extern void delay10us(uint32_t cnt); extern void delay10us(uint32_t cnt);
extern void vRadioBoot( void );
#endif #endif