19-I2C_M24C02-Library (STM32F4)

-diese Library dient zum ansteuern eines M24C02 (256Byte EEprom) von einem externen Modul das per I2C an den STM32F4 angeschlossen ist.
(das IC ist kompatibel mit dem PCF8582)

-auf der Hardware dürfen die zwei externen Pull-Up Widerstände (je 4k7) an SCL und SDA nicht vergessen werden, sonst funktioniert das ganze nicht.

-es können bis zu 8 M24C02 gleichzeitig an die I2C angeschlossen werden, dazu muss aber bei allen eine eindeutige Hardwareadresse eingestellt werden (mit den 3 Adresspins).

-es wird die I2C-LoLevel-Library benutzt (mit I2C1)

Beispielbild :

m24c02

Benutzte Pins :

1
2
SCL an PB6
SDA an PB7

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : keine
Benutzte Librarys : STM32_UB_I2C1

Enumerationen :

1
2
3
4
5
6
7
8
9
10
typedef enum {
  M24C02_0 = 0xA0, // A2=0, A1=0, A0=0
  M24C02_1 = 0xA2, // A2=0, A1=0, A0=1
  M24C02_2 = 0xA4, // A2=0, A1=1, A0=0
  M24C02_3 = 0xA6, // A2=0, A1=1, A0=1
  M24C02_4 = 0xA8, // A2=1, A1=0, A0=0
  M24C02_5 = 0xAA, // A2=1, A1=0, A0=1
  M24C02_6 = 0xAC, // A2=1, A1=1, A0=0
  M24C02_7 = 0xAE  // A2=1, A1=1, A0=1
}I2C_ADR_M24C02_t;

Funktionen :

1
2
3
ErrorStatus UB_M24C02_Init(I2C_ADR_M24C02_t slave);                             // um das EEProm zu initialisieren
int16_t UB_M24C02_ReadByte(I2C_ADR_M24C02_t slave, uint8_t adr);                // um ein Byte aus dem EEprom zu lesen
int16_t UB_M24C02_WriteByte(I2C_ADR_M24C02_t slave, uint8_t adr, uint8_t wert); // um ein Byte ins EEprom zu schreiben

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//--------------------------------------------------------------
// File     : main.c
// Datum    : 07.03.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der M24C02 Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_m24c02.h"
#include "stm32_ub_led.h"
 
int main(void)
{
  ErrorStatus check;
  int16_t wert;
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  UB_Led_Init(); // Init aller LEDs
 
  // init vom EEprom an I2C-1 mit Adr. 0xA2
  check=UB_M24C02_Init(M24C02_1);
  if(check==SUCCESS) {
    UB_Led_On(LED_GREEN);
 
    // Wert 0x12 in Adr 0x03 schreiben
    UB_M24C02_WriteByte(M24C02_1,0x03,0x12);
    // Wert wieder auslesen
    wert=UB_M24C02_ReadByte(M24C02_1,0x03);
    // auswerten ob alles OK
    if(wert==0x12) {
      UB_Led_On(LED_BLUE);
    }
    else {
      UB_Led_On(LED_ORANGE);
    }
  }
  else {
    UB_Led_On(LED_RED);
  }
 
  while(1)
  {
 
  }
}

Hier die Library zum Download :

ub_stm32f4_i2c_m24c02_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_19_I2C_M24C02

7 Antworten auf 19-I2C_M24C02-Library (STM32F4)

  1. Sefco sagt:

    Hallo!
    Danke für diese Anleitung! Du solltest jedoch dringend ergänzen, dass man ca. 10k Pull-up Widerstände zwischen SDA -> Vcc und SCL-> Vcc anbringen muss! Ich habe das nur auf dem Bild gesehen sonst würde es immer noch nicht laufen.

    Gruß

    • admin_ub sagt:

      Danke für den Hinweis, hab es ergänzt.

  2. Joerg sagt:

    Hallo Sefco,
    PB6 auf dem STMF4Discovery hat schon einen Pullup von 4,7k (siehe Schemantics)
    es reicht also ein 4,7k Pullup am PB9.

    PB6 und PB7 (beide mit Pullups) werden für den Audio Chip dort benutzt.

    Im übrigen sollte allgemein bekannt sein, dass I2C Pullups benötigt.

    Jörg

  3. vasa sagt:

    Good afternoon!
    Can I use this library to EEPROM at24c64?
    Thank You!

    • admin_ub sagt:

      no. at24c64 needs a two byte address command
      instead of one byte.

  4. To sagt:

    Hi,
    würde das ganze auch mit einem 24C512 funktionieren?
    vg

    • admin_ub sagt:

      nein, aber ich habe schon eine Library für den 24C512 geschrieben
      http://mikrocontroller.bplaced.net/wordpress/?page_id=4908
      ist zwar für den F429 kannst du aber per Copy&Paste
      in die Version vom F407 reinkopieren
      die I2C-LoLovel funktionen für den 16bit zugriff musst du auch kopieren.


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.