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
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.
Wo ist das Problem? Wenn der Chip-Hersteller das selbst sagt, dann ist es halt so...
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.
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 ...
Dennis-Christian G. schrieb: > Erstellt habe ich das Projekt per > CubeHAL Da kann ich nicht helfen - SPL hat bei mir immer reichen müssen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.