Forum: Mikrocontroller und Digitale Elektronik Hilfe beim CS42L52 Stereo Codec


von D.-Chr. G. (wasyl)


Lesenswert?

Mahlzeit,

ich bin gerade dabei, den CS42L52 per I2C anzusteuern. Unter Punkt 4.11 
des Datenblattes ( 
https://d3uzseaevmutz1.cloudfront.net/pubs/proDatasheet/CS42L52_F2.pdf#G6122857 
) wird aufgezeigt, wie der CS42L52 initialisiert wird. Meine Frage hier 
ist Folgende.
Wieso soll ich das Register 0x3E beschreiben, ohne dessen Beschreibung 
im Datenblatt zu finden? Ist das bei einigen Bauteilen so? Ich folge 
ungern den Anweisungen unter 4.11, ohne zu wissen wofür die einzelnen 
Bits in den Registern sorgen.


Grüße

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Dennis-Christian G. schrieb:
> Wieso soll ich das Register 0x3E beschreiben, ohne dessen Beschreibung
> im Datenblatt zu finden?

Tja, ist beim CS43L22 des STM32F4 Discovery Boards auch so. Man soll da 
undokumentierte Register beschreiben und was soll ich sagen - es 
funktioniert. Wie man sowas herausfindet, ist mir aber nicht bekannt.

von Georg A. (georga)


Lesenswert?

Wo ist das Problem? Wenn der Chip-Hersteller das selbst sagt, dann ist 
es halt so...

von D.-Chr. G. (wasyl)


Lesenswert?

Matthias S. schrieb:
> Dennis-Christian G. schrieb:
>> Wieso soll ich das Register 0x3E beschreiben, ohne dessen Beschreibung
>> im Datenblatt zu finden?
>
> Tja, ist beim CS43L22 des STM32F4 Discovery Boards auch so. Man soll da
> undokumentierte Register beschreiben und was soll ich sagen - es
> funktioniert. Wie man sowas herausfindet, ist mir aber nicht bekannt.

Vielen Dank. Habe meinen Code jetzt fertig, komischerweise läuft weder 
über die SDA noch über die SCL Line ein Signal. Beides ist permanent 
high wenn ich mit nem Oszi messe. Erstellt habe ich das Projekt per 
CubeHAL, demnach dürften alle Clocks für die notwendigen Peripherien 
aktiviert sein.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Dennis-Christian G. schrieb:
> Erstellt habe ich das Projekt per
> CubeHAL, demnach dürften alle Clocks für die notwendigen Peripherien
> aktiviert sein.

Poste mal die Initialisierung der GPIOs und der I2C Schnittstelle.

Oft fehlen irgendwelche Alternate-Function-Mappings oder sowas ...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Dennis-Christian G. schrieb:
> Erstellt habe ich das Projekt per
> CubeHAL

Da kann ich nicht helfen - SPL hat bei mir immer reichen müssen.

von D.-Chr. G. (wasyl)


Lesenswert?

Mampf F. schrieb:
> Poste mal die Initialisierung der GPIOs und der I2C Schnittstelle.
>
> Oft fehlen irgendwelche Alternate-Function-Mappings oder sowas ...

Hier meine I2C Init Funktion:
1
void MX_I2C1_Init(void)
2
{
3
4
  hi2c1.Instance = I2C1;
5
  hi2c1.Init.ClockSpeed = 40000;
6
  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
7
  hi2c1.Init.OwnAddress1 = 0;
8
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
9
  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
10
  hi2c1.Init.OwnAddress2 = 0;
11
  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
12
  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
13
  if (HAL_I2C_Init(&hi2c1) != HAL_OK)
14
  {
15
    _Error_Handler(__FILE__, __LINE__);
16
  }
17
18
}

Und hier die GPIO Init Funktion:
1
void MX_GPIO_Init(void)
2
{
3
4
  GPIO_InitTypeDef GPIO_InitStruct;
5
6
  /* GPIO Ports Clock Enable */
7
  __HAL_RCC_GPIOA_CLK_ENABLE();
8
  __HAL_RCC_GPIOB_CLK_ENABLE();
9
10
  /*Configure GPIO pin : PA8 */
11
  GPIO_InitStruct.Pin = GPIO_PIN_8;
12
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
13
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
14
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
15
16
}

Ich habe schon entdeckt, dass die Portkonfiguration von I2C in einer 
anderen Funktion statt findet, und zwar in folgender:
1
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
2
{
3
4
  GPIO_InitTypeDef GPIO_InitStruct;
5
  if(i2cHandle->Instance==I2C1)
6
  {
7
  /* USER CODE BEGIN I2C1_MspInit 0 */
8
9
  /* USER CODE END I2C1_MspInit 0 */
10
  
11
    /**I2C1 GPIO Configuration    
12
    PB8     ------> I2C1_SCL
13
    PB9     ------> I2C1_SDA 
14
    */
15
    GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
16
    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
17
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
18
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
19
20
    __HAL_AFIO_REMAP_I2C1_ENABLE();
21
22
    /* I2C1 clock enable */
23
    __HAL_RCC_I2C1_CLK_ENABLE();
24
25
    /* I2C1 interrupt Init */
26
    HAL_NVIC_SetPriority(I2C1_EV_IRQn, 0, 0);
27
    HAL_NVIC_EnableIRQ(I2C1_EV_IRQn);
28
    HAL_NVIC_SetPriority(I2C1_ER_IRQn, 0, 0);
29
    HAL_NVIC_EnableIRQ(I2C1_ER_IRQn);
30
  /* USER CODE BEGIN I2C1_MspInit 1 */
31
32
  /* USER CODE END I2C1_MspInit 1 */
33
  }
34
}

Nur weiß ich nicht, ob diese Funktion anderweitig schon aufgerufen wird, 
oder ob ich diese selber aufrufen muss. Deshalb hab ich eben versucht, 
diese aufzurufen, eine Änderung ist aber nicht fest zu stellen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.