打印
[AIROC™ 蓝牙]

[英飞凌CYW20829测评】进阶任务

[复制链接]
497|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1.ADC测试开发板的ADC引脚分布如下图所示:

使用特权

评论回复
沙发
一路向北lm|  楼主 | 2024-7-21 17:25 | 只看该作者
本次评测在英飞凌官方的DC_Monitoring例子上进行修改,具体代码如下:
    while (1)
    {
        /* Monitoring for every one second */
        Cy_SysLib_Delay(1000);

        Cy_ADCMic_SetInterruptMask(adcmic_0_HW, CY_ADCMIC_INTR_DC);
        Cy_ADCMic_ClearInterrupt(adcmic_0_HW, CY_ADCMIC_INTR);

        /* Enable the DC monitoring */
        Cy_ADCMic_Enable(adcmic_0_HW);

        /* ADC Settling Time */
        Cy_SysLib_Delay(10);

        /* Enable ADC timer to generate interrupt for reading the sample */
        Cy_ADCMic_EnableTimer(adcmic_0_HW);

        /* Wait for DC monitoring samples to complete */
        while(batmon_cplt);

        for (int i = 0; i < NO_OF_DC_SAMPLES; i++)
        {
            batmon_dc_avg = batmon_dc_avg + batmon_samples[i];
        }

        batmon_dc_avg = batmon_dc_avg/NO_OF_DC_SAMPLES;

        /* Convert the ADC code in millivolts */
        batt_level_mv = Cy_ADCMic_CountsTo_mVolts((int16_t)batmon_dc_avg, adcmic_0_config.dcConfig->context );

        printf("batt_level_mv = %d \r\n",batt_level_mv);

        /* Reset for the next set of readings */
        batmon_cplt = 1;
        batmon_dc_avg = 0;
    }

使用特权

评论回复
板凳
一路向北lm|  楼主 | 2024-7-21 17:28 | 只看该作者
将程序烧录到板子上,在串口上将会每秒输出ADC的电压

使用特权

评论回复
地板
一路向北lm|  楼主 | 2024-7-21 17:30 | 只看该作者
串口助手可以读取到ADC值的变化

使用特权

评论回复
5
一路向北lm|  楼主 | 2024-7-21 17:34 | 只看该作者
2.硬件ASE测试,上次玩硬件ASE还是在读研的时候,这次来感受一次英飞凌的ase

使用特权

评论回复
6
一路向北lm|  楼主 | 2024-7-21 17:37 | 只看该作者
本帖最后由 一路向北lm 于 2024-7-21 17:40 编辑

加解密算法具体如下:
/*******************************************************************************
* Function Name: encrypt_message_cfb
********************************************************************************
* Summary: Function used to encrypt the message through ctr mode.
*
* Parameters:
*  char * message - pointer to the message to be encrypted
*  uint8_t size   - size of message to be encrypted.
*
* Return:
*  void
*
*******************************************************************************/

void encrypt_message_ctr(uint8_t* message, uint8_t size)
{
    uint32_t srcOffset;
    cy_stc_cryptolite_aes_state_t aes_state;
    cy_stc_cryptolite_aes_buffers_t aesBuffers;
    uint8_t aes_block_count = 0;
    cy_en_cryptolite_status_t res;
    void* result;

    aes_block_count =  (size % AES128_ENCRYPTION_LENGTH == 0) ?
                       (size / AES128_ENCRYPTION_LENGTH)
                       : (1 + size / AES128_ENCRYPTION_LENGTH);
    /* Initializes the AES operation by setting key and key length */
     res = Cy_Cryptolite_Aes_Init(CRYPTOLITE, aes_key, &aes_state, &aesBuffers);
     if(res!=CY_CRYPTOLITE_SUCCESS)
     {
       CY_ASSERT(0);
     }

     srcOffset = 0;
     result = memcpy(AesCtrIV_copied, AesCtrIV, sizeof(AesCtrIV));
     res = Cy_Cryptolite_Aes_Ctr( CRYPTOLITE,
                            aes_block_count * AES128_ENCRYPTION_LENGTH,
                            &srcOffset,
                            AesCtrIV_copied,
                            encrypted_msg,
                            message,
                            &aes_state);
     if(res!=CY_CRYPTOLITE_SUCCESS)
     {
       CY_ASSERT(0);
     }
     res = Cy_Cryptolite_Aes_Free(CRYPTOLITE,&aes_state);
     if(res!=CY_CRYPTOLITE_SUCCESS)
     {
       CY_ASSERT(0);
     }
}

/*******************************************************************************
* Function Name: decrypt_message
********************************************************************************
* Summary: Function used to decrypt the message for ctr mode.
*
* Parameters:
*  char * message - pointer to the message to be decrypted
*  uint8_t size   - size of message to be decrypted.
*
* Return:
*  void
*
*******************************************************************************/

void decrypt_message_ctr(uint8_t* message, uint8_t size)
{
    uint32_t srcOffset;
    cy_stc_cryptolite_aes_state_t aes_state;
    cy_stc_cryptolite_aes_buffers_t aesBuffers;
    uint8_t aes_block_count = 0;
    cy_en_cryptolite_status_t res;
    void* result;
    aes_block_count =  (size % AES128_ENCRYPTION_LENGTH == 0) ?
                       (size / AES128_ENCRYPTION_LENGTH)
                       : (1 + size / AES128_ENCRYPTION_LENGTH);

    /* Initializes the AES operation by setting key and key length */
    res = Cy_Cryptolite_Aes_Init(CRYPTOLITE, aes_key, &aes_state, &aesBuffers);
    if(res!=CY_CRYPTOLITE_SUCCESS)
    {
        CY_ASSERT(0);
    }
    srcOffset = 0;
    /* Start decryption operation*/
    result = memcpy(AesCtrIV_copied, AesCtrIV, sizeof(AesCtrIV));
    res = Cy_Cryptolite_Aes_Ctr(  CRYPTOLITE,
                            aes_block_count * AES128_ENCRYPTION_LENGTH,
                            &srcOffset,
                            AesCtrIV_copied,
                            decrypted_msg,
                            encrypted_msg,
                            &aes_state);
    if(res!=CY_CRYPTOLITE_SUCCESS)
    {
        CY_ASSERT(0);
    }
    res = Cy_Cryptolite_Aes_Free(CRYPTOLITE,&aes_state);
    if(res!=CY_CRYPTOLITE_SUCCESS)
    {
        CY_ASSERT(0);
    }
    decrypted_msg[size]='\0';
}


使用特权

评论回复
7
一路向北lm|  楼主 | 2024-7-21 17:38 | 只看该作者

对该算法实际测试了,本次评测在AES_CRYPTOLITE例程测试,IDE编程后,烧写到开发板中,串口助手显示如下:

使用特权

评论回复
8
一路向北lm|  楼主 | 2024-7-21 17:39 | 只看该作者
英飞凌CYW20829芯片硬件加解密模块确实牛掰,好用啊,上手简单....极力推荐

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

275

主题

3784

帖子

76

粉丝