From 4a13a65024bf292fd6ed577e29010ee1da7d947f Mon Sep 17 00:00:00 2001 From: bsongis Date: Mon, 18 May 2015 20:17:02 +0200 Subject: [PATCH 01/10] I2C Read at 400MHz (hardware). I2C Write still not implemented --- radio/src/Makefile | 2 + radio/src/targets/taranis/board_taranis.h | 2 + radio/src/targets/taranis/bootloader/Makefile | 1 + radio/src/targets/taranis/i2c_driver.cpp | 91 +++++++++++++------ 4 files changed, 70 insertions(+), 26 deletions(-) diff --git a/radio/src/Makefile b/radio/src/Makefile index fe6682137..b89d69733 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -905,6 +905,7 @@ ifeq ($(PCB), TARANIS) SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c + SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_i2c.c SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c SRC += $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c @@ -917,6 +918,7 @@ ifeq ($(PCB), TARANIS) SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dbgmcu.c SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c + SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_i2c.c SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_dma.c SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rtc.c SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_pwr.c diff --git a/radio/src/targets/taranis/board_taranis.h b/radio/src/targets/taranis/board_taranis.h index 254fdf327..a75c4fd01 100644 --- a/radio/src/targets/taranis/board_taranis.h +++ b/radio/src/targets/taranis/board_taranis.h @@ -48,6 +48,7 @@ extern "C" { #include "STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rcc.h" #include "STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_gpio.h" #include "STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_spi.h" + #include "STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h" #include "STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rtc.h" #include "STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_pwr.h" #include "STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_dma.h" @@ -60,6 +61,7 @@ extern "C" { #include "STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rcc.h" #include "STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_gpio.h" #include "STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_spi.h" + #include "STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_i2c.h" #include "STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rtc.h" #include "STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_pwr.h" #include "STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_dma.h" diff --git a/radio/src/targets/taranis/bootloader/Makefile b/radio/src/targets/taranis/bootloader/Makefile index 7b33a0e2b..f51934e94 100755 --- a/radio/src/targets/taranis/bootloader/Makefile +++ b/radio/src/targets/taranis/bootloader/Makefile @@ -141,6 +141,7 @@ else SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c + SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_i2c.c SRC += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/src/misc.c endif diff --git a/radio/src/targets/taranis/i2c_driver.cpp b/radio/src/targets/taranis/i2c_driver.cpp index 5b576776a..f62eeff0b 100644 --- a/radio/src/targets/taranis/i2c_driver.cpp +++ b/radio/src/targets/taranis/i2c_driver.cpp @@ -139,32 +139,45 @@ void eepromInit(void) RCC_APB1PeriphClockCmd(I2C_RCC_APB1Periph_I2C, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = I2C_GPIO_PIN_SCL | I2C_GPIO_PIN_SDA | I2C_GPIO_PIN_WP; + GPIO_InitStructure.GPIO_Pin = I2C_GPIO_PIN_WP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(I2C_GPIO, &GPIO_InitStructure); -#if 0 - GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PIN_SCL, I2C_GPIO_AF); - GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PIN_SDA, I2C_GPIO_AF); + GPIO_InitStructure.GPIO_Pin = I2C_GPIO_PIN_SCL | I2C_GPIO_PIN_SDA; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(I2C_GPIO, &GPIO_InitStructure); + + GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PinSource_SCL, I2C_GPIO_AF); + GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PinSource_SDA, I2C_GPIO_AF); I2C_InitTypeDef I2C_InitStructure; - I2C_InitStructure.I2C_OwnAddress1 = 0x00; // MPU6050 7-bit adress = 0x68, 8-bit adress = 0xD0; + I2C_InitStructure.I2C_ClockSpeed = 400000; + I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_16_9; + I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_Init(I2C, &I2C_InitStructure); I2C_Cmd(I2C, ENABLE); -#endif GPIO_ResetBits(I2C_GPIO, I2C_GPIO_PIN_WP); +} - // Set Idle levels - SDA_H; - SCL_H; +#define I2C_TIMEOUT_MAX 1000 +bool I2C_CheckEventTimeout(uint32_t event) +{ + uint32_t timeout = I2C_TIMEOUT_MAX; + while (!I2C_CheckEvent(I2C, event)) { + if ((timeout--) == 0) return false; + } + return true; } /** @@ -177,27 +190,43 @@ void eepromInit(void) */ void eepromReadBlock(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t NumByteToRead) { - I2C_START(); - I2C_SEND_DATA(I2C_ADDRESS_EEPROM|EE_CMD_WRITE); - I2C_WAIT_ACK(); - I2C_SEND_DATA((uint8_t)((ReadAddr & 0xFF00) >> 8)); - I2C_WAIT_ACK(); - I2C_SEND_DATA((uint8_t)(ReadAddr & 0x00FF)); - I2C_WAIT_ACK(); - - I2C_START(); - I2C_SEND_DATA(I2C_ADDRESS_EEPROM|EE_CMD_READ); - I2C_WAIT_ACK(); + I2C_AcknowledgeConfig(I2C, ENABLE); + + I2C_GenerateSTART(I2C, ENABLE); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_MODE_SELECT)) + return; + + I2C_Send7bitAddress(I2C, I2C_ADDRESS_EEPROM, I2C_Direction_Transmitter); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + return; + + I2C_SendData(I2C, (uint8_t)((ReadAddr & 0xFF00) >> 8)); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + return; + I2C_SendData(I2C, (uint8_t)(ReadAddr & 0x00FF)); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + return; + + I2C_GenerateSTART(I2C, ENABLE); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_MODE_SELECT)) + return; + + I2C_Send7bitAddress(I2C, I2C_ADDRESS_EEPROM, I2C_Direction_Receiver); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) + return; + while (NumByteToRead) { if (NumByteToRead == 1) { - *pBuffer = I2C_READ(); - I2C_NO_ACK(); - I2C_STOP(); + I2C_AcknowledgeConfig(I2C, DISABLE); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_RECEIVED)) + return; + *pBuffer = I2C_ReceiveData(I2C); + I2C_GenerateSTOP(I2C, ENABLE); } else { - *pBuffer = I2C_READ(); - I2C_ACK(); - pBuffer++; + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_RECEIVED)) + return; + *pBuffer++ = I2C_ReceiveData(I2C); } NumByteToRead--; } @@ -213,6 +242,7 @@ void eepromReadBlock(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t NumByteToRead */ void eepromWriteBlock(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) { +#if 0 uint8_t NumOfPage = 0, NumOfSingle = 0, count = 0; uint16_t Addr = 0; @@ -288,6 +318,7 @@ void eepromWriteBlock(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWr } } } +#endif } /** @@ -301,6 +332,7 @@ void eepromWriteBlock(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWr */ void I2C_EE_PageWrite(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t NumByteToWrite) { +#if 0 I2C_START(); I2C_SEND_DATA(I2C_ADDRESS_EEPROM|EE_CMD_WRITE); I2C_WAIT_ACK(); @@ -317,6 +349,7 @@ void I2C_EE_PageWrite(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t NumByteToWri pBuffer++; } I2C_STOP(); +#endif } /** @@ -326,16 +359,19 @@ void I2C_EE_PageWrite(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t NumByteToWri */ void I2C_EE_WaitEepromStandbyState(void) { +#if 0 do { I2C_START(); I2C_SEND_DATA(I2C_ADDRESS_EEPROM|EE_CMD_WRITE); } while (0 == I2C_WAIT_ACK()); I2C_STOP(); +#endif } void setVolume(uint8_t volume) { +#if 0 if (volume > VOLUME_LEVEL_MAX) { volume = VOLUME_LEVEL_MAX; } @@ -348,10 +384,12 @@ void setVolume(uint8_t volume) I2C_SEND_DATA(volume); I2C_WAIT_ACK(); I2C_STOP(); +#endif } uint8_t I2C_read_volume() { +#if 0 uint8_t volume ; I2C_START(); I2C_SEND_DATA(I2C_ADDRESS_CAT5137|EE_CMD_WRITE); @@ -365,4 +403,5 @@ uint8_t I2C_read_volume() I2C_NO_ACK(); I2C_STOP(); return volume ; +#endif } From ca9f250f647eb35e271bf7a48081802ff0fc8ff9 Mon Sep 17 00:00:00 2001 From: bsongis Date: Mon, 18 May 2015 21:16:14 +0200 Subject: [PATCH 02/10] Missing optimizations in the bootloader --- radio/src/targets/taranis/bootloader/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/targets/taranis/bootloader/Makefile b/radio/src/targets/taranis/bootloader/Makefile index f51934e94..aa5c085df 100755 --- a/radio/src/targets/taranis/bootloader/Makefile +++ b/radio/src/targets/taranis/bootloader/Makefile @@ -238,8 +238,8 @@ endif #ASFLAGS = $(MCFLAGS) -g -gdwarf-2 -Wa,-amhls=$(OBJDIR)/$(notdir $(<:.s=.lst)) $(ADEFS) CPFLAGS = $(MCFLAGS) $(OPT) -gdwarf-2 -mthumb -fomit-frame-pointer -Wall -Wstrict-prototypes -fverbose-asm $(DEFS) -LDFLAGS = $(MCFLAGS) -mthumb -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(FULL_PRJ).map,--cref,--no-warn-mismatch $(LIBDIR) $(NEWLIB_NANO_FLAGS) -CPPFLAGS = $(MCFLAGS) $(OPT) -gdwarf-2 -mthumb -fomit-frame-pointer -Wall -fverbose-asm $(DEFS) +LDFLAGS = $(MCFLAGS) -mthumb -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(FULL_PRJ).map,--cref,--no-warn-mismatch,--gc-sections $(LIBDIR) $(NEWLIB_NANO_FLAGS) +CPPFLAGS = $(MCFLAGS) $(OPT) -gdwarf-2 -mthumb -fomit-frame-pointer -fdata-sections -ffunction-sections -Wall -fverbose-asm $(DEFS) CPPFLAGS += $(CPPDEFS) CPFLAGS += $(CPPDEFS) From 5401ead546c8fa3a49b8662708e3bd053c84c536 Mon Sep 17 00:00:00 2001 From: bsongis Date: Mon, 18 May 2015 21:27:18 +0200 Subject: [PATCH 03/10] Makefile simplification. Fixes simu compilation error --- radio/src/Makefile | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/radio/src/Makefile b/radio/src/Makefile index b89d69733..7d552026b 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -382,7 +382,6 @@ LUADIR = $(THIRDPARTY)/Lua/src SRC = CPPSRC = INCDIRS = . translations -EXTRAINCDIRS = LUADEP = DEBUG_TRACE_BUFFER = NO @@ -878,15 +877,15 @@ ifeq ($(PCB), TARANIS) STM32LIBPATH = $(THIRDPARTY)/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries CPPDEFS += -DHSE_VALUE=12000000 CPPDEFS += -DSTM32F40_41xxx - EXTRAINCDIRS += $(STM32LIBPATH)/CMSIS/Device/ST/STM32F4xx/Include $(STM32LIBPATH)/CMSIS/Include $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/inc + INCDIRS += $(STM32LIBPATH)/CMSIS/Device/ST/STM32F4xx/Include $(STM32LIBPATH)/CMSIS/Include $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/inc else STM32LIBPATH= $(THIRDPARTY)/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries CPPDEFS += -DHSE_VALUE=12000000 - EXTRAINCDIRS += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/inc $(STM32LIBPATH)/CMSIS/Device/ST/STM32F2xx/Include $(STM32LIBPATH)/CMSIS/include + INCDIRS += $(STM32LIBPATH)/STM32F2xx_StdPeriph_Driver/inc $(STM32LIBPATH)/CMSIS/Device/ST/STM32F2xx/Include $(STM32LIBPATH)/CMSIS/include endif STM32USBPATH = $(THIRDPARTY)/STM32_USB-Host-Device_Lib_V2.1.0/Libraries - EXTRAINCDIRS += $(STM32USBPATH)/STM32_USB_OTG_Driver/inc $(STM32USBPATH)/STM32_USB_Device_Library/Core/inc - EXTRAINCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/inc $(STM32USBPATH)/STM32_USB_Device_Library/Class/hid/inc + INCDIRS += $(STM32USBPATH)/STM32_USB_OTG_Driver/inc $(STM32USBPATH)/STM32_USB_Device_Library/Core/inc + INCDIRS += $(STM32USBPATH)/STM32_USB_Device_Library/Class/msc/inc $(STM32USBPATH)/STM32_USB_Device_Library/Class/hid/inc GUIGENERALSRC += gui/$(GUIDIRECTORY)/menu_general_hardware.cpp BOARDSRC = main_arm.cpp targets/taranis/board_taranis.cpp EXTRABOARDSRC += targets/taranis/configure_pins.cpp targets/taranis/lcd_driver.cpp targets/taranis/flash_driver.cpp targets/taranis/i2c_driver.cpp targets/taranis/aspi.c targets/taranis/delays.c @@ -1349,7 +1348,6 @@ CPPFLAGS += -fno-exceptions CPPFLAGS += -Wno-strict-aliasing CPPFLAGS += -Wformat -Wreturn-type -Wunused -Wuninitialized -Wunknown-pragmas -Wno-switch -Wtype-limits INCFLAGS = $(patsubst %,-I%,$(INCDIRS)) -EXTRAINCFLAGS = $(patsubst %,-I%,$(EXTRAINCDIRS)) MATH_LIB = -lm @@ -1377,8 +1375,8 @@ MSG_CLEANING = Cleaning project: # Add target processor to flags. CPPFLAGS += -DFLAVOUR=\"$(FLAVOUR)\" -ARMCPPFLAGS = -c -mcpu=$(MCU) -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=opentx.lst -DRUN_FROM_FLASH=1 -O$(OPT) $(CPPFLAGS) -fdata-sections -ffunction-sections $(INCFLAGS) $(EXTRAINCFLAGS) $(GENDEPFLAGS) -AVRCPPFLAGS = -mmcu=$(MCU) -I. -x c++ -O$(OPT) $(CPPFLAGS) $(INCFLAGS) $(EXTRAINCFLAGS) $(GENDEPFLAGS) -fwhole-program +ARMCPPFLAGS = -c -mcpu=$(MCU) -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=opentx.lst -DRUN_FROM_FLASH=1 -O$(OPT) $(CPPFLAGS) -fdata-sections -ffunction-sections $(INCFLAGS) $(GENDEPFLAGS) +AVRCPPFLAGS = -mmcu=$(MCU) -I. -x c++ -O$(OPT) $(CPPFLAGS) $(INCFLAGS) $(GENDEPFLAGS) -fwhole-program ifeq ($(ARCH), AVR) GCCVERSIONGTE462 := $(shell expr 4.6.2 \<= `$(CC) -dumpversion`) From bb761f8cf604a8055cc6e1c8293cc46225882487 Mon Sep 17 00:00:00 2001 From: bsongis Date: Fri, 29 May 2015 20:06:29 +0200 Subject: [PATCH 04/10] EEPROM write added. Speed slowed down to 200kHz --- radio/src/targets/taranis/i2c_driver.cpp | 327 ++++++----------------- 1 file changed, 78 insertions(+), 249 deletions(-) diff --git a/radio/src/targets/taranis/i2c_driver.cpp b/radio/src/targets/taranis/i2c_driver.cpp index f62eeff0b..96609a9f7 100644 --- a/radio/src/targets/taranis/i2c_driver.cpp +++ b/radio/src/targets/taranis/i2c_driver.cpp @@ -1,138 +1,10 @@ #include "board_taranis.h" -#define EE_CMD_WRITE (0) -#define EE_CMD_READ (1) - -#define SCL_H do { I2C_GPIO->BSRRL = I2C_GPIO_PIN_SCL; } while(0) -#define SCL_L do { I2C_GPIO->BSRRH = I2C_GPIO_PIN_SCL; } while(0) -#define SDA_H do { I2C_GPIO->BSRRL = I2C_GPIO_PIN_SDA; } while(0) -#define SDA_L do { I2C_GPIO->BSRRH = I2C_GPIO_PIN_SDA; } while(0) -#define SCL_read (I2C_GPIO->IDR & I2C_GPIO_PIN_SCL) -#define SDA_read (I2C_GPIO->IDR & I2C_GPIO_PIN_SDA) - void I2C_EE_PageWrite(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t NumByteToWrite); void I2C_EE_WaitEepromStandbyState(void); - void I2C_set_volume(register uint8_t volume); uint8_t I2C_read_volume(void); -#define I2C_delay() delay_01us(100); - -short I2C_START(void) -{ - SDA_H; - I2C_delay(); - SCL_H; - I2C_delay(); - // if (!SDA_read) return 0; - SDA_L; - I2C_delay(); - // if (SDA_read) return 0; - SCL_L; - I2C_delay(); - return 1; -} - -void I2C_STOP(void) -{ - SCL_L; - I2C_delay(); - SDA_L; - I2C_delay(); - SCL_H; - I2C_delay(); - SDA_H; - I2C_delay(); -} - -void I2C_ACK(void) -{ - SCL_L; - I2C_delay(); - SDA_L; - I2C_delay(); - SCL_H; - I2C_delay(); - SCL_L; - I2C_delay(); -} - -void I2C_NO_ACK(void) -{ - SCL_L; - I2C_delay(); - SDA_H; - I2C_delay(); - SCL_H; - I2C_delay(); - SCL_L; - I2C_delay(); -} - -short I2C_WAIT_ACK(void) -{ - short i=50; - SCL_L; - I2C_delay(); - SDA_H; - I2C_delay(); - SCL_H; - I2C_delay(); - while (i) { - if(SDA_read) { - I2C_delay(); - i--; - } - else { - i=2; - break; - } - } - SCL_L; - I2C_delay(); - - return i; -} - -void I2C_SEND_DATA(char SendByte) -{ - short i=8; - while (i--) { - SCL_L; - // I2C_delay(); - if (SendByte & 0x80) - SDA_H; - else - SDA_L; - SendByte <<= 1; - I2C_delay(); - SCL_H; - I2C_delay(); - } - SCL_L; - I2C_delay(); -} - -char I2C_READ(void) -{ - short i=8; - char ReceiveByte=0; - - SDA_H; - while (i--) { - ReceiveByte <<= 1; - SCL_L; - I2C_delay(); - SCL_H; - I2C_delay(); - if (SDA_read) { - ReceiveByte|=0x01; - } - } - SCL_L; - return ReceiveByte; -} - void eepromInit(void) { RCC_AHB1PeriphClockCmd(I2C_RCC_AHB1Periph_GPIO, ENABLE); @@ -150,18 +22,18 @@ void eepromInit(void) GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(I2C_GPIO, &GPIO_InitStructure); GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PinSource_SCL, I2C_GPIO_AF); GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PinSource_SDA, I2C_GPIO_AF); I2C_InitTypeDef I2C_InitStructure; - I2C_InitStructure.I2C_ClockSpeed = 400000; - I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_16_9; + I2C_InitStructure.I2C_ClockSpeed = 200000; + I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; - I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; // TODO Disable I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_Init(I2C, &I2C_InitStructure); @@ -190,7 +62,7 @@ bool I2C_CheckEventTimeout(uint32_t event) */ void eepromReadBlock(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t NumByteToRead) { - I2C_AcknowledgeConfig(I2C, ENABLE); + while (I2C_CheckEvent(I2C, I2C_FLAG_BUSY)); I2C_GenerateSTART(I2C, ENABLE); if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_MODE_SELECT)) @@ -201,7 +73,7 @@ void eepromReadBlock(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t NumByteToRead return; I2C_SendData(I2C, (uint8_t)((ReadAddr & 0xFF00) >> 8)); - if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTING)) return; I2C_SendData(I2C, (uint8_t)(ReadAddr & 0x00FF)); if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTED)) @@ -215,21 +87,21 @@ void eepromReadBlock(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t NumByteToRead if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) return; + if (NumByteToRead > 1) { + I2C_AcknowledgeConfig(I2C, ENABLE); + } + while (NumByteToRead) { if (NumByteToRead == 1) { I2C_AcknowledgeConfig(I2C, DISABLE); - if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_RECEIVED)) - return; - *pBuffer = I2C_ReceiveData(I2C); - I2C_GenerateSTOP(I2C, ENABLE); - } - else { - if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_RECEIVED)) - return; - *pBuffer++ = I2C_ReceiveData(I2C); } + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_RECEIVED)) + return; + *pBuffer++ = I2C_ReceiveData(I2C); NumByteToRead--; } + + I2C_GenerateSTOP(I2C, ENABLE); } /** @@ -242,83 +114,20 @@ void eepromReadBlock(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t NumByteToRead */ void eepromWriteBlock(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) { -#if 0 - uint8_t NumOfPage = 0, NumOfSingle = 0, count = 0; - uint16_t Addr = 0; - - Addr = WriteAddr % I2C_FLASH_PAGESIZE; - count = I2C_FLASH_PAGESIZE - Addr; - NumOfPage = NumByteToWrite / I2C_FLASH_PAGESIZE; - NumOfSingle = NumByteToWrite % I2C_FLASH_PAGESIZE; - - /* If WriteAddr is I2C_FLASH_PAGESIZE aligned */ - if (Addr == 0) { - /* If NumByteToWrite < I2C_FLASH_PAGESIZE */ - if (NumOfPage == 0) { - I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle); - I2C_EE_WaitEepromStandbyState(); - } - /* If NumByteToWrite > I2C_FLASH_PAGESIZE */ - else { - while (NumOfPage--) { - I2C_EE_PageWrite(pBuffer, WriteAddr, I2C_FLASH_PAGESIZE); - I2C_EE_WaitEepromStandbyState(); - WriteAddr += I2C_FLASH_PAGESIZE; - pBuffer += I2C_FLASH_PAGESIZE; - } - - if (NumOfSingle != 0) { - I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle); - I2C_EE_WaitEepromStandbyState(); - } - } + uint8_t offset = WriteAddr % I2C_FLASH_PAGESIZE; + uint8_t count = I2C_FLASH_PAGESIZE - offset; + if (NumByteToWrite < I2C_FLASH_PAGESIZE) + count = NumByteToWrite; + while (count > 0) { + I2C_EE_PageWrite(pBuffer, WriteAddr, count); + I2C_EE_WaitEepromStandbyState(); + WriteAddr += count; + pBuffer += count; + NumByteToWrite -= count; + count = I2C_FLASH_PAGESIZE; + if (NumByteToWrite < I2C_FLASH_PAGESIZE) + count = NumByteToWrite; } - /* If WriteAddr is not I2C_FLASH_PAGESIZE aligned */ - else { - /* If NumByteToWrite < I2C_FLASH_PAGESIZE */ - if (NumOfPage== 0) { - /* If the number of data to be written is more than the remaining space - in the current page: */ - if (NumByteToWrite > count) { - /* Write the data conained in same page */ - I2C_EE_PageWrite(pBuffer, WriteAddr, count); - I2C_EE_WaitEepromStandbyState(); - - /* Write the remaining data in the following page */ - I2C_EE_PageWrite((uint8_t*)(pBuffer + count), (WriteAddr + count), (NumByteToWrite - count)); - I2C_EE_WaitEepromStandbyState(); - } - else { - I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle); - I2C_EE_WaitEepromStandbyState(); - } - } - /* If NumByteToWrite > I2C_FLASH_PAGESIZE */ - else { - NumByteToWrite -= count; - NumOfPage = NumByteToWrite / I2C_FLASH_PAGESIZE; - NumOfSingle = NumByteToWrite % I2C_FLASH_PAGESIZE; - - if (count != 0) { - I2C_EE_PageWrite(pBuffer, WriteAddr, count); - I2C_EE_WaitEepromStandbyState(); - WriteAddr += count; - pBuffer += count; - } - - while (NumOfPage--) { - I2C_EE_PageWrite(pBuffer, WriteAddr, I2C_FLASH_PAGESIZE); - I2C_EE_WaitEepromStandbyState(); - WriteAddr += I2C_FLASH_PAGESIZE; - pBuffer += I2C_FLASH_PAGESIZE; - } - if (NumOfSingle != 0) { - I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle); - I2C_EE_WaitEepromStandbyState(); - } - } - } -#endif } /** @@ -332,24 +141,35 @@ void eepromWriteBlock(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWr */ void I2C_EE_PageWrite(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t NumByteToWrite) { -#if 0 - I2C_START(); - I2C_SEND_DATA(I2C_ADDRESS_EEPROM|EE_CMD_WRITE); - I2C_WAIT_ACK(); + while (I2C_CheckEvent(I2C, I2C_FLAG_BUSY)); - I2C_SEND_DATA((uint8_t)((WriteAddr & 0xFF00) >> 8)); - I2C_WAIT_ACK(); - I2C_SEND_DATA((uint8_t)(WriteAddr & 0x00FF)); - I2C_WAIT_ACK(); + I2C_GenerateSTART(I2C, ENABLE); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_MODE_SELECT)) + return; + + I2C_Send7bitAddress(I2C, I2C_ADDRESS_EEPROM, I2C_Direction_Transmitter); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + return; + + I2C_SendData(I2C, (uint8_t)((WriteAddr & 0xFF00) >> 8)); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTING)) + return; + I2C_SendData(I2C, (uint8_t)(WriteAddr & 0x00FF)); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTING)) + return; /* While there is data to be written */ while (NumByteToWrite--) { - I2C_SEND_DATA(*pBuffer); - I2C_WAIT_ACK(); + I2C_SendData(I2C, *pBuffer); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTING)) + return; pBuffer++; } - I2C_STOP(); -#endif + + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + return; + + I2C_GenerateSTOP(I2C, ENABLE); } /** @@ -359,37 +179,46 @@ void I2C_EE_PageWrite(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t NumByteToWri */ void I2C_EE_WaitEepromStandbyState(void) { -#if 0 do { - I2C_START(); - I2C_SEND_DATA(I2C_ADDRESS_EEPROM|EE_CMD_WRITE); - } while (0 == I2C_WAIT_ACK()); + I2C_GenerateSTART(I2C, ENABLE); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_MODE_SELECT)) + return; - I2C_STOP(); -#endif + I2C_Send7bitAddress(I2C, I2C_ADDRESS_EEPROM, I2C_Direction_Transmitter); + } while (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); + + I2C_GenerateSTOP(I2C, ENABLE); } void setVolume(uint8_t volume) { -#if 0 if (volume > VOLUME_LEVEL_MAX) { volume = VOLUME_LEVEL_MAX; } - I2C_START(); - I2C_SEND_DATA(I2C_ADDRESS_CAT5137|EE_CMD_WRITE); - I2C_WAIT_ACK(); - I2C_SEND_DATA(0); - I2C_WAIT_ACK(); - I2C_SEND_DATA(volume); - I2C_WAIT_ACK(); - I2C_STOP(); -#endif + while (I2C_CheckEvent(I2C, I2C_FLAG_BUSY)); + + I2C_GenerateSTART(I2C, ENABLE); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_MODE_SELECT)) + return; + + I2C_Send7bitAddress(I2C, I2C_ADDRESS_CAT5137, I2C_Direction_Transmitter); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) + return; + + I2C_SendData(I2C, 0); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTING)) + return; + I2C_SendData(I2C, volume); + if (!I2C_CheckEventTimeout(I2C_EVENT_MASTER_BYTE_TRANSMITTED)) + return; + + I2C_GenerateSTOP(I2C, ENABLE); } +#if 0 uint8_t I2C_read_volume() { -#if 0 uint8_t volume ; I2C_START(); I2C_SEND_DATA(I2C_ADDRESS_CAT5137|EE_CMD_WRITE); @@ -403,5 +232,5 @@ uint8_t I2C_read_volume() I2C_NO_ACK(); I2C_STOP(); return volume ; -#endif } +#endif From 8bf7a78b779ceeb69028286157da326b6ba12b65 Mon Sep 17 00:00:00 2001 From: bsongis Date: Fri, 29 May 2015 21:23:44 +0200 Subject: [PATCH 05/10] 240kHz --- radio/src/targets/taranis/i2c_driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/targets/taranis/i2c_driver.cpp b/radio/src/targets/taranis/i2c_driver.cpp index 96609a9f7..6565fe0fd 100644 --- a/radio/src/targets/taranis/i2c_driver.cpp +++ b/radio/src/targets/taranis/i2c_driver.cpp @@ -29,7 +29,7 @@ void eepromInit(void) GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PinSource_SDA, I2C_GPIO_AF); I2C_InitTypeDef I2C_InitStructure; - I2C_InitStructure.I2C_ClockSpeed = 200000; + I2C_InitStructure.I2C_ClockSpeed = 240000; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; From d3b55e8ad67d2eecb02f669efa7bee8107b304b6 Mon Sep 17 00:00:00 2001 From: bsongis Date: Fri, 29 May 2015 21:34:47 +0200 Subject: [PATCH 06/10] Compilation fix. Now I2C @ 240kHz --- .../Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_i2c.h | 2 +- .../Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/thirdparty/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_i2c.h b/radio/src/thirdparty/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_i2c.h index ab8617eeb..983d28d52 100644 --- a/radio/src/thirdparty/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_i2c.h +++ b/radio/src/thirdparty/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_i2c.h @@ -35,7 +35,7 @@ #endif /* Includes ------------------------------------------------------------------*/ -#include "stm32f2xx.h" +#include "../../CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h" /** @addtogroup STM32F2xx_StdPeriph_Driver * @{ diff --git a/radio/src/thirdparty/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h b/radio/src/thirdparty/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h index 16c83b485..5a4a386af 100644 --- a/radio/src/thirdparty/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h +++ b/radio/src/thirdparty/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_i2c.h @@ -35,7 +35,7 @@ #endif /* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx.h" +#include "../../CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h" /** @addtogroup STM32F4xx_StdPeriph_Driver * @{ From 6682d0c6d3d306783f025324b8c47862565dde84 Mon Sep 17 00:00:00 2001 From: bsongis Date: Sun, 31 May 2015 16:08:17 +0200 Subject: [PATCH 07/10] 200kHz on non REVPLUS boards --- radio/src/targets/taranis/hal.h | 5 ++++ radio/src/targets/taranis/i2c_driver.cpp | 32 +++++++++++------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 789c418b6..126d78f41 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -324,6 +324,11 @@ #define I2C_GPIO_AF GPIO_AF_I2C1 #define I2C_GPIO_PinSource_SCL GPIO_PinSource6 #define I2C_GPIO_PinSource_SDA GPIO_PinSource7 +#if defined(REVPLUS) + #define I2C_SPEED 400000 +#else + #define I2C_SPEED 200000 +#endif #define I2C_ADDRESS_EEPROM 0xA2 #define I2C_ADDRESS_CAT5137 0x5C #define I2C_FLASH_PAGESIZE 64 diff --git a/radio/src/targets/taranis/i2c_driver.cpp b/radio/src/targets/taranis/i2c_driver.cpp index 6565fe0fd..aa02afd73 100644 --- a/radio/src/targets/taranis/i2c_driver.cpp +++ b/radio/src/targets/taranis/i2c_driver.cpp @@ -17,29 +17,27 @@ void eepromInit(void) GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(I2C_GPIO, &GPIO_InitStructure); + GPIO_ResetBits(I2C_GPIO, I2C_GPIO_PIN_WP); + + I2C_InitTypeDef I2C_InitStructure; + I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; + I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; + I2C_InitStructure.I2C_OwnAddress1 = 0x00; + I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; + I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; + I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; + I2C_Init(I2C, &I2C_InitStructure); + I2C_Cmd(I2C, ENABLE); + + GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PinSource_SCL, I2C_GPIO_AF); + GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PinSource_SDA, I2C_GPIO_AF); GPIO_InitStructure.GPIO_Pin = I2C_GPIO_PIN_SCL | I2C_GPIO_PIN_SDA; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(I2C_GPIO, &GPIO_InitStructure); - - GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PinSource_SCL, I2C_GPIO_AF); - GPIO_PinAFConfig(I2C_GPIO, I2C_GPIO_PinSource_SDA, I2C_GPIO_AF); - - I2C_InitTypeDef I2C_InitStructure; - I2C_InitStructure.I2C_ClockSpeed = 240000; - I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; - I2C_InitStructure.I2C_OwnAddress1 = 0x00; - I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; - I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; // TODO Disable - I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; - - I2C_Init(I2C, &I2C_InitStructure); - I2C_Cmd(I2C, ENABLE); - - GPIO_ResetBits(I2C_GPIO, I2C_GPIO_PIN_WP); } #define I2C_TIMEOUT_MAX 1000 From bbb5cd9fdb073f993cd93e78a1d857a6b9bc98e6 Mon Sep 17 00:00:00 2001 From: bsongis Date: Sun, 31 May 2015 16:09:14 +0200 Subject: [PATCH 08/10] Code used to test I2C speeds --- radio/src/eeprom_rlc.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/radio/src/eeprom_rlc.cpp b/radio/src/eeprom_rlc.cpp index 7609c1d93..45a30e5a9 100644 --- a/radio/src/eeprom_rlc.cpp +++ b/radio/src/eeprom_rlc.cpp @@ -282,6 +282,28 @@ void eepromFormat() bool eepromOpen() { +#if 0 + ALERT("!!START!!", "START", AU_ERROR); + + static uint16_t mybuffer[2048]; + + for (int i=0; i<2048; i++) { + mybuffer[i] = i; + } + + eepromWriteBlock((uint8_t *)mybuffer, 0, sizeof(mybuffer)); + + eepromReadBlock((uint8_t *)mybuffer, 0, sizeof(mybuffer)); + + for (int i=0; i<2048; i++) { + if (mybuffer[i] != i) { + ALERT("!!ERROR!!", "ERROR", AU_ERROR); + } + } + + ALERT("!!OK!!", "OK", AU_ERROR); +#endif + eepromReadBlock((uint8_t *)&eeFs, 0, sizeof(eeFs)); #ifdef SIMU From 23adad950a75414a85e8fd47a7332dd5fcea8ba8 Mon Sep 17 00:00:00 2001 From: bsongis Date: Sun, 31 May 2015 16:43:15 +0200 Subject: [PATCH 09/10] REV4a only supports 100kHz, this is why I had random errors! Now I need tests at 400kHz for the standard (non Plus) Taranis. I keep 200kHz for now. --- radio/src/targets/taranis/hal.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 126d78f41..54a102c4c 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -326,6 +326,8 @@ #define I2C_GPIO_PinSource_SDA GPIO_PinSource7 #if defined(REVPLUS) #define I2C_SPEED 400000 +#elif defined(REV4a) + #define I2C_SPEED 100000 #else #define I2C_SPEED 200000 #endif From f49a23b6354ef8889051f8b3d9df15ed7165bd1b Mon Sep 17 00:00:00 2001 From: bsongis Date: Fri, 5 Jun 2015 09:45:04 +0200 Subject: [PATCH 10/10] I2C speed now 400kHz except on REV4a boards --- radio/src/targets/taranis/hal.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 54a102c4c..4913e55bc 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -324,12 +324,10 @@ #define I2C_GPIO_AF GPIO_AF_I2C1 #define I2C_GPIO_PinSource_SCL GPIO_PinSource6 #define I2C_GPIO_PinSource_SDA GPIO_PinSource7 -#if defined(REVPLUS) - #define I2C_SPEED 400000 -#elif defined(REV4a) +#if defined(REV4a) #define I2C_SPEED 100000 #else - #define I2C_SPEED 200000 + #define I2C_SPEED 400000 #endif #define I2C_ADDRESS_EEPROM 0xA2 #define I2C_ADDRESS_CAT5137 0x5C