Based on Sternhelden/Arduino-SMI-Library
SMI (Serial Management Interface) read and write functions for 8-bit AVR microcontrollers (ATtiny13).
DDR and PORT registers must be specified in smi.h (SMI_PORTDDR and SMI_PORT) according to the location of SMI pins.
void SMIinit(uint8_t clockPin, uint8_t dataPin) - initializes pin variables
void smiWrite(uint8_t HB, uint8_t LB, uint8_t target[]) - writes data to SMI bus
void smiRead(uint8_t HB, uint8_t LB, uint8_t target[]) - read data from SMI bus
In both smiRead and smiWrite functions:
HB[1:0] - bits [4:3] of PHY address, other bits are not used
LB[7:5] - bits [2:0] of PHY address
LB[4:0] - bits [5:0] of register address
target[] - 2-byte data array
MARVELL Multichip functions:
void readMultiChip(uint8_t device, uint8_t reg, uint8_t regvalue[2])
void writeMultiChip(uint8_t device, uint8_t reg, uint8_t regvalue[2])
uint8_t device - PHY address;
uint8_t reg - register addres;
uint8_t regvalue[2] - 2-byte data array
#define SMI_ADDR 0x02 - multichip address of MARVELL IC