cancel
Showing results for 
Search instead for 
Did you mean: 

STM32H750 Hash peripheral issue

CShen
Associate

Hi all,

I have two different batches of Revision V STM32H750VBT6. All units in one of the batches (Date Code 045) has issue with the hash peripheral while the one (Date Code 928) is working completely fine.

I created a new basic project for testing this issue and the code is as shown. However, HAL_HASHEx_SHA256_Start() always ended up returning HAL_TIMEOUT. Based on the SFR register view in Atollic TrueSTUDIO, all the registers for hash peripheral remains at value 0x0.

*Note : The same project is working fine for Revision V STM32H750VBT6 (Date Code 928) and Revision Y STM32H750VBT6 (Date Code 002) *

Things I have done/tried

  1. Directly editing the registers values in SFR register view shows illegal input while bit editing has no effect. (*There isn't any issue editing other peripheral registers for example SysTick SYST_CSR*)
  2. Checked RCC_AHB2ENR HASHEN bit is enabled indicating the clock to hash peripheral is enabled.
  3. Used different firmware packages STM32CubeH7 v1.5.0, v1.7.0 and v1.8.0
  4. Used code generated from STM32CubeMX version 5.6.1 and version 6.1.1
MX_HASH_Init();
 
uint8_t data[256] = {1,2,3,4,5};
uint8_t digest[64];
 
HAL_StatusTypeDef halStatus = HAL_HASHEx_SHA256_Start(&(hhash), data, 256, digest, 1000);

Could it be that there are defects in the MCU ? Thanks.

0693W000007ZMTUQA4.png 

0693W000007ZMWMQA4.png

3 REPLIES 3

How confident are you in the source of these parts?

Looks like the unit is not enabled.

The UNIQUE ID might be a useful reference point, as would the FLASH size

printf("UNIQUE %08X-%08X-%08X\n",

*((uint32_t *)0x1FF1E800),

*((uint32_t *)0x1FF1E804),

*((uint32_t *)0x1FF1E808));

printf("FLASH %d KB\n", *((uint16_t *)0x1FF1E880));

void CORECheck(void) // sourcer32@gmail.com
{
  uint32_t cpuid = SCB->CPUID;
  uint32_t var, pat;
 
  printf("CPUID %08X DEVID %03X REVID %04X\n", cpuid, DBGMCU->IDCODE & 0xFFF, (DBGMCU->IDCODE >> 16) & 0xFFFF);
 
  pat = (cpuid & 0x0000000F);
  var = (cpuid & 0x00F00000) >> 20;
 
  if ((cpuid & 0xFF000000) == 0x41000000) // ARM
  {
    switch((cpuid & 0x0000FFF0) >> 4)
    {
      case 0xC20 : printf("Cortex M0 r%dp%d\n", var, pat); break;
      case 0xC60 : printf("Cortex M0+ r%dp%d\n", var, pat); break;
      case 0xC21 : printf("Cortex M1 r%dp%d\n", var, pat); break;
      case 0xC23 : printf("Cortex M3 r%dp%d\n", var, pat); break;
      case 0xC24 : printf("Cortex M4 r%dp%d\n", var, pat); break;
      case 0xC27 : printf("Cortex M7 r%dp%d\n", var, pat); break;
 
      default : printf("Unknown CORE\n");
    }
  }
  else
    printf("Unknown CORE IMPLEMENTER\n");
}

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..

Hi @Community member​ 

The MCU is purchased from Element14.

Yup it indeed looks that the peripheral is not enabled properly.

MX_HASH_Init() is called for enabling and initializing the peripheral before calling HAL_HASHEx_SHA256_Start();

FYI,

CPUID 411FC271 DEVID 450 REVID 2003

Cortex M7 r1p1

UNIQUE 0033002D-3230510D-31303431

FLASH 128 KB

0693W000007ZO3CQAW.png 

Imen.D
ST Employee

Hello @CShen​  and welcome to the STM32 Community :smiling_face_with_smiling_eyes:

Thank you for posting your issue.

I recommend you to contact your FAE as they will be able to work more closely with you as more detailed information may be needed which should not be posted in a public community.

Imen

When your question is answered, please close this topic by clicking "Accept as Solution".
Thanks
Imen