From d4e52e570a19bee6932b8ad34c5bd5966b1d3d3a Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期一, 08 十一月 2021 16:45:53 +0800 Subject: [PATCH] 菲曼模组测试完成 --- 源码/核心板/Src/decadriver/deca_device.c | 79 ++++++++++++++++++++++++++++++++++++--- 1 files changed, 73 insertions(+), 6 deletions(-) diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/decadriver/deca_device.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/decadriver/deca_device.c" index 40dfb9c..a503ab7 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/decadriver/deca_device.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/decadriver/deca_device.c" @@ -103,15 +103,61 @@ * returns DWT_SUCCESS for success, or DWT_ERROR for error */ // OTP addresses definitions +#define CPUID_OTP_ADRESS 0x1d + +uint32_t ReadUniqueID(void) +{ + uint8_t m_UIDAdd[4]; + uint32_t cpuID_add; + //获取CPU唯一ID +// m_CpuID.Data32[0] = *(vu32*)(0x1ffff7e8); +// m_CpuID.Data32[1] = *(vu32*)(0x1ffff7ec); +// m_CpuID.Data32[2] = *(vu32*)(0x1ffff7f0); + //这里是防止反汇编能看到在哪里读取的UID,将UID的地址分解存在RAM中 + //加密算法,很简单的加密算法 + m_UIDAdd[0] = 0xE8; + m_UIDAdd[1] = m_UIDAdd[0]+0x0F; //f7 = e8 + 0f + m_UIDAdd[2] = m_UIDAdd[1]+0x08; //ff = f7 + 08 + m_UIDAdd[3] = m_UIDAdd[2]-0xe0; //1f = ff - e0 + memcpy(&cpuID_add, (uint8_t*)m_UIDAdd, 4); + + return *(uint32_t*)(cpuID_add); +} + +uint8_t UID_ERROR=0; +void CheckCPUID(void) +{ uint32_t cpuID = 0; + uint32_t key_ID = 0; + uint8_t i=10; + cpuID = ReadUniqueID(); + Spi_ChangePrescaler(SPI_BaudRatePrescaler_256); + while(i--) + { + dwt_otpread(CPUID_OTP_ADRESS,&key_ID,1); + if(cpuID != key_ID) + { + UID_ERROR = 1; + } + else + { + UID_ERROR = 0; + break; + } +} + + Spi_ChangePrescaler(SPI_BaudRatePrescaler_8); +} #define LDOTUNE_ADDRESS (0x04) #define PARTID_ADDRESS (0x06) #define LOTID_ADDRESS (0x07) #define VBAT_ADDRESS (0x08) #define VTEMP_ADDRESS (0x09) #define XTRIM_ADDRESS (0x1E) - + u8 module_power; int dwt_initialise(uint16_t config) { + + u32 power_temp,power_input; uint8_t plllockdetect = EC_CTRL_PLLLCK; uint16_t otp_addr = 0; uint32_t ldo_tune = 0; @@ -127,14 +173,26 @@ // Read and validate device ID return -1 if not recognised dw1000local.deviceID = dwt_readdevid() ; - if (DWT_DEVICE_ID != dw1000local.deviceID) // MP IC ONLY (i.e. DW1000) FOR THIS CODE + while (DWT_DEVICE_ID != dw1000local.deviceID) // MP IC ONLY (i.e. DW1000) FOR THIS CODE { - return DWT_ERROR ; + dw1000local.deviceID = dwt_readdevid() ; } _dwt_enableclocks(FORCE_SYS_XTI); // NOTE: set system clock to XTI - this is necessary to make sure the values read by _dwt_otpread are reliable - - dwt_write32bitreg(TX_POWER_ID, 0x1f1f1f1f); + if(module_power>67) + {module_power=67;} + if(module_power<0) + {module_power=0;} + if(module_power>36) + { + power_temp =(module_power-36); + }else{ + power_temp = ((6-(module_power/6))<<5)|(module_power%6); + } + power_input= power_temp<<24|power_temp<<16|power_temp<<8|power_temp; + dwt_write32bitreg(TX_POWER_ID, power_input); + + //dwt_write32bitreg(TX_POWER_ID, 0x1f1f1f1f); // Configure the CPLL lock detect dwt_writetodevice(EXT_SYNC_ID, EC_CTRL_OFFSET, 1, &plllockdetect); @@ -182,7 +240,16 @@ // Read system register / store local copy dw1000local.sysCFGreg = dwt_read32bitreg(SYS_CFG_ID) ; // Read sysconfig register - + { + uint32_t reg; + reg = dwt_read32bitreg(GPIO_CTRL_ID); + reg |= 0x00014000; + reg |= 0x00050000; + dwt_write32bitreg(GPIO_CTRL_ID,reg); + dwt_write16bitoffsetreg(PMSC_ID,PMSC_TXFINESEQ_OFFSET ,PMSC_TXFINESEQ_DIS_MASK); + + } + CheckCPUID(); return DWT_SUCCESS ; } // end dwt_initialise() -- Gitblit v1.9.3