Ah ok,
habe gerade ein Beispiel gesehen...
In der vtss_appl_board_venice.c
//Zuerst deklarieren sie ein Board:
--
1 | vtss_appl_board_t *board;
|
2 | // Hier kommt noch etwas unverständliches:
|
3 | // In this case we only have one board. Assign point to the board definition
|
4 | board = &board_table[0];
|
5 | memset (&board_table[0], 0, (sizeof(vtss_appl_board_t) * MAX_BOARD_INSTANCES));
|
// Sie initialisieren das Board:
---
1 | vtss_board_phy_init(board);
|
2 | //sie kreieren ein Board:
|
3 | // "Create" the board
|
4 | vtss_inst_get(board->target, &create);
|
5 | vtss_inst_create(&create, &board->inst);
|
6 | vtss_init_conf_get(board->inst, &init_conf);
|
//Die Funktion vtss_board_phy_init() enthält:
---
1 |
|
2 | board->board_init = venice_board_init;
|
3 | //Diese Funktion(venice_board_init) befindet sich in phy_demo_appl/appl/vtss_appl_board_venice.c
|
4 | // Sie enthält zwei mögliche Funktionen:
|
5 | #if defined(RPI_MIIM)
|
6 | rpi_venice_board_init(argc, argv, board); // Use init function for Raspberry PI MIIM.
|
7 | #else
|
8 | venice_char_board_init(argc, argv, board); // Use init function for Rabbit MIIM.
|
9 | #endif /* RPI_MIIM */
|
Beide würden ein anderes Board definieren. Einer bezeichnet einen
RaspberryPI, ein anderer ein Rabbit-Board.
Ich glaube, das rpi-Board wird hier nicht beschrieben -
Letztlich gibt es dann die Zeile, in der es explizit heißt:
1 | board->init.init_conf->spi_32bit_read_write = *spi_32bit_read_write_rbt; // Set pointer to the SPI read function for this board.
|
Die Funktion spi_32bit_read_write_rbt; ist nur einige Zeilen zuvor
definiert:
1 | ////////////////////////////////////////////////////////////////////////////////
|
2 | // MMD_Read and MMD_Write Code for Rabbit
|
3 | // ---Unfinished because the rabbit code is optimized for neumonic values not straight port/mmd/addr hex values
|
4 | ////////////////////////////////////////////////////////////////////////////////
|
5 | vtss_rc mmd_read_rbt(const vtss_inst_t inst,
|
6 | const vtss_port_no_t port_no,
|
7 | const u8 mmd,
|
8 | u16 addr,
|
9 | u16 *const value)
|
10 | {
|
11 | char buffer[255];
|
12 | int v;
|
13 |
|
14 | sprintf(buffer, "mdio_rd %x %x %x", port_no, mmd, addr);
|
15 | printf ("%s\n", buffer);
|
16 | T_N("mmd_read_rbt: %s", buffer);
|
17 | socket_write(&buffer[0]);
|
18 | memset(buffer, 0, sizeof(buffer));
|
19 | socket_read(&buffer[0]);
|
(Aber es ist seltsam, da dieses Beispiel einen Socket für SPI verwendet.
Vielleicht hat jemand eine Idee dazu)
Ich sollte also meine eigene Board-Definition verwenden, denke ich ....
Und vielleicht den SPI-Zugang durch meine Board-spezifische I2C-Funktion
ersetzen? Ich meine ich habe keine andere Verbindung zu dem PHY..