[U-Boot] AVR32 AP700x - I2C somewhere?

Reinhard Meyer (-VC) reinhard.meyer at emk-elektronik.de
Wed Jun 2 14:37:07 CEST 2010


Andreas Bießmann schrieb:
> Am 01.06.2010 16:04, schrieb Reinhard Meyer (-VC):
>   
>> Hi,
>>     
> Dear Reinhard Meyer,
>
>   
>> has anyone started or completed work on an I2C driver for AP7000x?
>>     
> No ...
>   
>> If not, I am at least going to make SOFT I2C defines to read VPD from an 
>> At24C64 EEPROM.
>>     
> But I've working soft-i2c here. There are still some other examples in
> u-boot how to interface a at24xx eeprom.
>   
Thank you. That worked to verify my setup.
I was fooled by the AtTiny on the NGW100 which does try to slow I2C 
Transfers by pulling SCL low.
That feature however is NOT honored by the SOFT_I2C driver.
So accesses to my At24C64 had to fail. After removing the AtTiny it 
works fine :)
> custom board config file:
> ---8<---
> /* i2c definitions */
> #define CONFIG_SOFT_I2C
> #if defined(CONFIG_SOFT_I2C)
> #define DEBUG_I2C
> #ifndef __ASSEMBLY__
> #include <asm/arch/portmux.h>
> #define MEDUCORE_SDA_PIN	6
> #define MEDUCORE_SCL_PIN	7
>
> #define I2C_ACTIVE	portmux_select_gpio(PORTMUX_PORT_A,
> (1<<MEDUCORE_SDA_PIN), PORTMUX_DIR_OUTPUT|PORTMUX_INIT_LOW)
> #define I2C_TRISTATE		portmux_select_gpio(PORTMUX_PORT_A,
> (1<<MEDUCORE_SDA_PIN), PORTMUX_DIR_INPUT|PORTMUX_OPEN_DRAIN)
>   
The functions ACTIVE and TRISTATE are not required when the Pins are 
initialized OUTPUT and OPENDRAIN as follows:

int board_early_init_f(void)
{
    ...
#ifdef CONFIG_CMD_I2C
    // first select SCL and SDA gpio
    portmux_select_gpio(PORTMUX_PORT_A,(1<<SDA_PIN), 
PORTMUX_DIR_OUTPUT|PORTMUX_INIT_LOW|PORTMUX_OPEN_DRAIN);
    portmux_select_gpio(PORTMUX_PORT_A,(1<<SCL_PIN), 
PORTMUX_DIR_OUTPUT|PORTMUX_INIT_LOW|PORTMUX_OPEN_DRAIN);
    // initialize i2c
    i2c_init(1000, 0x27);
#endif
    return 0;
}

The I2C Bus by definition is a wired-or bus, all devices must have open 
drain outputs for SDA and SCL!

Best Regards,
Reinhard



More information about the U-Boot mailing list