Problem with i2c on latest version of platformio on teensy4.1

I have some projects that use the a SSD1306 oled display driven via i2c. These all used to work. One of these projects is a simple port of the Adafruit SSD1306 test program I will use this as an example.

Here is the platformio.ini for that project.

[env]
build_flags = -std=gnu++17
lib_deps = adafruit/Adafruit SSD1306@^2.5.7
    adafruit/Adafruit BusIO@1.15.0

[env:nucleo_f103rb]
platform = ststm32
board = nucleo_f103rb
framework = arduino
monitor_port = /dev/ttyACM0

[env:teensy41]
platform = teensy
board = teensy41
framework = arduino

The ststm32 platform build works fine. The teensy platform build produces compiles and uploads but has no output on the i2c SDA or SCL pads. An Arduino IDE build of the same code works perfectly.

Here is the sketch code main.cpp

#include <Arduino.h>
/**************************************************************************
 This is an example for our Monochrome OLEDs based on SSD1306 drivers

 Pick one up today in the adafruit shop!
 ------> http://www.adafruit.com/category/63_98

 This example is for a 128x64 pixel display using I2C to communicate
 3 pins are required to interface (two I2C and one reset).

 Adafruit invests time and resources providing this open
 source code, please support Adafruit and open-source
 hardware by purchasing products from Adafruit!

 Written by Limor Fried/Ladyada for Adafruit Industries,
 with contributions from the open source community.
 BSD license, check license.txt for more information
 All text above, and the splash screen below must be
 included in any redistribution.
 **************************************************************************/

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library.
// On an arduino UNO:       A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO:   2(SDA),  3(SCL), ...
#define OLED_RESET -1       // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define NUMFLAKES 10 // Number of snowflakes in the animation example

#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
static const unsigned char PROGMEM logo_bmp[] =
    {0b00000000, 0b11000000,
     0b00000001, 0b11000000,
     0b00000001, 0b11000000,
     0b00000011, 0b11100000,
     0b11110011, 0b11100000,
     0b11111110, 0b11111000,
     0b01111110, 0b11111111,
     0b00110011, 0b10011111,
     0b00011111, 0b11111100,
     0b00001101, 0b01110000,
     0b00011011, 0b10100000,
     0b00111111, 0b11100000,
     0b00111111, 0b11110000,
     0b01111100, 0b11110000,
     0b01110000, 0b01110000,
     0b00000000, 0b00110000};

void testdrawline()
{
    int16_t i;

    display.clearDisplay(); // Clear display buffer

    for (i = 0; i < display.width(); i += 4)
    {
        display.drawLine(0, 0, i, display.height() - 1, SSD1306_WHITE);
        display.display(); // Update screen with each newly-drawn line
        delay(1);
    }
    for (i = 0; i < display.height(); i += 4)
    {
        display.drawLine(0, 0, display.width() - 1, i, SSD1306_WHITE);
        display.display();
        delay(1);
    }
    delay(250);

    display.clearDisplay();

    for (i = 0; i < display.width(); i += 4)
    {
        display.drawLine(0, display.height() - 1, i, 0, SSD1306_WHITE);
        display.display();
        delay(1);
    }
    for (i = display.height() - 1; i >= 0; i -= 4)
    {
        display.drawLine(0, display.height() - 1, display.width() - 1, i, SSD1306_WHITE);
        display.display();
        delay(1);
    }
    delay(250);

    display.clearDisplay();

    for (i = display.width() - 1; i >= 0; i -= 4)
    {
        display.drawLine(display.width() - 1, display.height() - 1, i, 0, SSD1306_WHITE);
        display.display();
        delay(1);
    }
    for (i = display.height() - 1; i >= 0; i -= 4)
    {
        display.drawLine(display.width() - 1, display.height() - 1, 0, i, SSD1306_WHITE);
        display.display();
        delay(1);
    }
    delay(250);

    display.clearDisplay();

    for (i = 0; i < display.height(); i += 4)
    {
        display.drawLine(display.width() - 1, 0, 0, i, SSD1306_WHITE);
        display.display();
        delay(1);
    }
    for (i = 0; i < display.width(); i += 4)
    {
        display.drawLine(display.width() - 1, 0, i, display.height() - 1, SSD1306_WHITE);
        display.display();
        delay(1);
    }

    delay(2000); // Pause for 2 seconds
}

void testdrawrect(void)
{
    display.clearDisplay();

    for (int16_t i = 0; i < display.height() / 2; i += 2)
    {
        display.drawRect(i, i, display.width() - 2 * i, display.height() - 2 * i, SSD1306_WHITE);
        display.display(); // Update screen with each newly-drawn rectangle
        delay(1);
    }

    delay(2000);
}

void testfillrect(void)
{
    display.clearDisplay();

    for (int16_t i = 0; i < display.height() / 2; i += 3)
    {
        // The INVERSE color is used so rectangles alternate white/black
        display.fillRect(i, i, display.width() - i * 2, display.height() - i * 2, SSD1306_INVERSE);
        display.display(); // Update screen with each newly-drawn rectangle
        delay(1);
    }

    delay(2000);
}

void testdrawcircle(void)
{
    display.clearDisplay();

    for (int16_t i = 0; i < max(display.width(), display.height()) / 2; i += 2)
    {
        display.drawCircle(display.width() / 2, display.height() / 2, i, SSD1306_WHITE);
        display.display();
        delay(1);
    }

    delay(2000);
}

void testfillcircle(void)
{
    display.clearDisplay();

    for (int16_t i = max(display.width(), display.height()) / 2; i > 0; i -= 3)
    {
        // The INVERSE color is used so circles alternate white/black
        display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE);
        display.display(); // Update screen with each newly-drawn circle
        delay(1);
    }

    delay(2000);
}

void testdrawroundrect(void)
{
    display.clearDisplay();

    for (int16_t i = 0; i < display.height() / 2 - 2; i += 2)
    {
        display.drawRoundRect(i, i, display.width() - 2 * i, display.height() - 2 * i,
                              display.height() / 4, SSD1306_WHITE);
        display.display();
        delay(1);
    }

    delay(2000);
}

void testfillroundrect(void)
{
    display.clearDisplay();

    for (int16_t i = 0; i < display.height() / 2 - 2; i += 2)
    {
        // The INVERSE color is used so round-rects alternate white/black
        display.fillRoundRect(i, i, display.width() - 2 * i, display.height() - 2 * i,
                              display.height() / 4, SSD1306_INVERSE);
        display.display();
        delay(1);
    }

    delay(2000);
}

void testdrawtriangle(void)
{
    display.clearDisplay();

    for (int16_t i = 0; i < max(display.width(), display.height()) / 2; i += 5)
    {
        display.drawTriangle(
            display.width() / 2, display.height() / 2 - i,
            display.width() / 2 - i, display.height() / 2 + i,
            display.width() / 2 + i, display.height() / 2 + i, SSD1306_WHITE);
        display.display();
        delay(1);
    }

    delay(2000);
}

void testfilltriangle(void)
{
    display.clearDisplay();

    for (int16_t i = max(display.width(), display.height()) / 2; i > 0; i -= 5)
    {
        // The INVERSE color is used so triangles alternate white/black
        display.fillTriangle(
            display.width() / 2, display.height() / 2 - i,
            display.width() / 2 - i, display.height() / 2 + i,
            display.width() / 2 + i, display.height() / 2 + i, SSD1306_INVERSE);
        display.display();
        delay(1);
    }

    delay(2000);
}

void testdrawchar(void)
{
    display.clearDisplay();

    display.setTextSize(1);              // Normal 1:1 pixel scale
    display.setTextColor(SSD1306_WHITE); // Draw white text
    display.setCursor(0, 0);             // Start at top-left corner
    display.cp437(true);                 // Use full 256 char 'Code Page 437' font

    // Not all the characters will fit on the display. This is normal.
    // Library will draw what it can and the rest will be clipped.
    for (int16_t i = 0; i < 256; i++)
    {
        if (i == '\n')
            display.write(' ');
        else
            display.write(i);
    }

    display.display();
    delay(2000);
}

void testdrawstyles(void)
{
    display.clearDisplay();

    display.setTextSize(1);              // Normal 1:1 pixel scale
    display.setTextColor(SSD1306_WHITE); // Draw white text
    display.setCursor(0, 0);             // Start at top-left corner
    display.println(F("Hello, world!"));

    display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text
    display.println(3.141592);

    display.setTextSize(2); // Draw 2X-scale text
    display.setTextColor(SSD1306_WHITE);
    display.print(F("0x"));
    display.println(0xDEADBEEF, HEX);

    display.display();
    delay(2000);
}

void testscrolltext(void)
{
    display.clearDisplay();

    display.setTextSize(2); // Draw 2X-scale text
    display.setTextColor(SSD1306_WHITE);
    display.setCursor(10, 0);
    display.println(F("scroll"));
    display.display(); // Show initial text
    delay(100);

    // Scroll in various directions, pausing in-between:
    display.startscrollright(0x00, 0x0F);
    delay(2000);
    display.stopscroll();
    delay(1000);
    display.startscrollleft(0x00, 0x0F);
    delay(2000);
    display.stopscroll();
    delay(1000);
    display.startscrolldiagright(0x00, 0x07);
    delay(2000);
    display.startscrolldiagleft(0x00, 0x07);
    delay(2000);
    display.stopscroll();
    delay(1000);
}

void testdrawbitmap(void)
{
    display.clearDisplay();

    display.drawBitmap(
        (display.width() - LOGO_WIDTH) / 2,
        (display.height() - LOGO_HEIGHT) / 2,
        logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1);
    display.display();
    delay(1000);
}

#define XPOS 0 // Indexes into the 'icons' array in function below
#define YPOS 1
#define DELTAY 2

void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h)
{
    int8_t f, icons[NUMFLAKES][3];

    // Initialize 'snowflake' positions
    for (f = 0; f < NUMFLAKES; f++)
    {
        icons[f][XPOS] = random(1 - LOGO_WIDTH, display.width());
        icons[f][YPOS] = -LOGO_HEIGHT;
        icons[f][DELTAY] = random(1, 6);
        Serial.print(F("x: "));
        Serial.print(icons[f][XPOS], DEC);
        Serial.print(F(" y: "));
        Serial.print(icons[f][YPOS], DEC);
        Serial.print(F(" dy: "));
        Serial.println(icons[f][DELTAY], DEC);
    }

    for (;;)
    {                           // Loop forever...
        display.clearDisplay(); // Clear the display buffer

        // Draw each snowflake:
        for (f = 0; f < NUMFLAKES; f++)
        {
            display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SSD1306_WHITE);
        }

        display.display(); // Show the display buffer on the screen
        delay(200);        // Pause for 1/10 second

        // Then update coordinates of each flake...
        for (f = 0; f < NUMFLAKES; f++)
        {
            icons[f][YPOS] += icons[f][DELTAY];
            // If snowflake is off the bottom of the screen...
            if (icons[f][YPOS] >= display.height())
            {
                // Reinitialize to a random position, just off the top
                icons[f][XPOS] = random(1 - LOGO_WIDTH, display.width());
                icons[f][YPOS] = -LOGO_HEIGHT;
                icons[f][DELTAY] = random(1, 6);
            }
        }
    }

}

void setup()
{
    // Setup monitor
    Serial.begin(9600);

    Serial.printf("Serial is ready\n");

    // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
    if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
    {
        Serial.println(F("SSD1306 allocation failed"));
        for (;;)
            ; // Don't proceed, loop forever
    }
    

    // Show initial display buffer contents on the screen --
    // the library initializes this with an Adafruit splash screen.
    Serial.printf("About to show logo\n");
    Serial.flush();
    display.display();
    Serial.printf("Displaying logo\n");
    Serial.flush();
    delay(2000); // Pause for 2 seconds

    // Clear the buffer
    display.clearDisplay();

    // Draw a single pixel in white
    display.drawPixel(10, 10, SSD1306_WHITE);

    // Show the display buffer on the screen. You MUST call display() after
    // drawing commands to make them visible on screen!
    display.display();
    delay(2000);
    // display.display() is NOT necessary after every single drawing command,
    // unless that's what you want...rather, you can batch up a bunch of
    // drawing operations and then update the screen all at once by calling
    // display.display(). These examples demonstrate both approaches...

    testdrawline(); // Draw many lines

    testdrawrect(); // Draw rectangles (outlines)

    testfillrect(); // Draw rectangles (filled)

    testdrawcircle(); // Draw circles (outlines)

    testfillcircle(); // Draw circles (filled)

    testdrawroundrect(); // Draw rounded rectangles (outlines)

    testfillroundrect(); // Draw rounded rectangles (filled)

    testdrawtriangle(); // Draw triangles (outlines)

    testfilltriangle(); // Draw triangles (filled)

    testdrawchar(); // Draw characters of the default font

    testdrawstyles(); // Draw 'stylized' characters

    testscrolltext(); // Draw scrolling text

    testdrawbitmap(); // Draw a small bitmap image

    // Invert and restore display, pausing in-between
    display.invertDisplay(true);
    delay(1000);
    display.invertDisplay(false);
    delay(1000);

    testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT); // Animate bitmaps
}

void loop()
{
}

I have more info if required but it exceeds the post limit. I will put put it into a second post.

But the summary is Arduino build works, ststm32 build works, teensy41 build does not work.

Anyone got any ideas on how to proceed on this?

Here is the additional information.

Computed project configuration for /home/roger/pioprojects/ssd1306test
env
---
build_flags  =  -std=gnu++17
lib_deps     =  adafruit/Adafruit SSD1306@^2.5.7
                adafruit/Adafruit BusIO@1.15.0

env:nucleo_f103rb
-----------------
platform      =  ststm32
board         =  nucleo_f103rb
framework     =  arduino
monitor_port  =  /dev/ttyACM0
build_flags   =  -std=gnu++17
lib_deps      =  adafruit/Adafruit SSD1306@^2.5.7
                 adafruit/Adafruit BusIO@1.15.0

env:teensy41
------------
platform     =  teensy
board        =  teensy41
framework    =  arduino
build_flags  =  -std=gnu++17
lib_deps     =  adafruit/Adafruit SSD1306@^2.5.7
                adafruit/Adafruit BusIO@1.15.0

Resolving nucleo_f103rb dependencies...
Already up-to-date.
Resolving teensy41 dependencies...
Already up-to-date.

Environment: nucleo_f103rb
==========================
build_type      =  "release"
env_name        =  "nucleo_f103rb"
libsource_dirs  =  [
                     "/home/roger/pioprojects/ssd1306test/lib",
                     "/home/roger/pioprojects/ssd1306test/.pio/libdeps/nucleo_f103rb",
                     "/home/roger/.platformio/lib",
                     "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/__cores__/arduino",
                     "/home/roger/.platformio/packages/framework-arduinoststm32/libraries"
                   ]
defines         =  [
                     "PLATFORMIO=60114",
                     "STM32F103xB",
                     "STM32F1xx",
                     "ARDUINO=10808",
                     "ARDUINO_ARCH_STM32",
                     "NDEBUG",
                     "ARDUINO_NUCLEO_F103RB",
                     "BOARD_NAME=\"NUCLEO_F103RB\"",
                     "HAL_UART_MODULE_ENABLED",
                     "USE_FULL_LL_DRIVER",
                     "VARIANT_H=\"variant_NUCLEO_F103RB.h\"",
                     "VECT_TAB_OFFSET=0x0"
                   ]
includes        =  {
                     "build": [
                       "/home/roger/pioprojects/ssd1306test/include",
                       "/home/roger/pioprojects/ssd1306test/src",
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/nucleo_f103rb/Adafruit SSD1306",
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/nucleo_f103rb/Adafruit GFX Library",
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/nucleo_f103rb/Adafruit BusIO",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/SPI/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/Wire/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/cores/arduino/avr",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/cores/arduino/stm32",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/cores/arduino/stm32/LL",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/cores/arduino/stm32/usb",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/cores/arduino/stm32/OpenAMP",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/cores/arduino/stm32/usb/hid",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/cores/arduino/stm32/usb/cdc",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/Drivers/STM32F1xx_HAL_Driver/Inc",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/Drivers/STM32F1xx_HAL_Driver/Src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/STM32F1xx",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/Middlewares/ST/STM32_USB_Device_Library/Core/Inc",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/Middlewares/ST/STM32_USB_Device_Library/Core/Src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/Middlewares/OpenAMP",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/Middlewares/OpenAMP/open-amp/lib/include",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/Middlewares/OpenAMP/libmetal/lib/include",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/Middlewares/OpenAMP/virtual_driver",
                       "/home/roger/.platformio/packages/framework-cmsis/CMSIS/Core/Include",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/Drivers/CMSIS/Device/ST/STM32F1xx/Include",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/system/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc",
                       "/home/roger/.platformio/packages/framework-cmsis/CMSIS/DSP/Include",
                       "/home/roger/.platformio/packages/framework-cmsis/CMSIS/DSP/PrivateInclude",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/cores/arduino",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/variants/STM32F1xx/F103R(8-B)T"
                     ],
                     "compatlib": [
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/nucleo_f103rb/Adafruit BusIO",
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/nucleo_f103rb/Adafruit GFX Library",
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/nucleo_f103rb/Adafruit SSD1306",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/SPI/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/Wire/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/CMSIS_DSP/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/EEPROM/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/IWatchdog/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/Keyboard/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/Mouse/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/RGB_LED_TLC59731/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/Servo/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/SoftwareSerial/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/SrcWrapper/src",
                       "/home/roger/.platformio/packages/framework-arduinoststm32/libraries/SubGhz/src"
                     ],
                     "toolchain": [
                       "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi/arm-none-eabi/include/c++/12.3.1",
                       "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi/arm-none-eabi/include/c++/12.3.1/arm-none-eabi",
                       "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi/lib/gcc/arm-none-eabi/12.3.1/include-fixed",
                       "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi/lib/gcc/arm-none-eabi/12.3.1/include",
                       "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi/arm-none-eabi/include"
                     ]
                   }
cc_flags        =  [
                     "-std=gnu17",
                     "-mcpu=cortex-m3",
                     "-mthumb",
                     "-Os",
                     "-ffunction-sections",
                     "-fdata-sections",
                     "-nostdlib",
                     "--param",
                     "max-inline-insns-single=500"
                   ]
cxx_flags       =  [
                     "-std=gnu++17",
                     "-std=gnu++17",
                     "-fno-threadsafe-statics",
                     "-fno-rtti",
                     "-fno-exceptions",
                     "-fno-use-cxa-atexit",
                     "-mcpu=cortex-m3",
                     "-mthumb",
                     "-Os",
                     "-ffunction-sections",
                     "-fdata-sections",
                     "-nostdlib",
                     "--param",
                     "max-inline-insns-single=500"
                   ]
cc_path         =  "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi/bin/arm-none-eabi-gcc"
cxx_path        =  "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi/bin/arm-none-eabi-g++"
gdb_path        =  "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi/bin/arm-none-eabi-gdb"
prog_path       =  "/home/roger/pioprojects/ssd1306test/.pio/build/nucleo_f103rb/firmware.elf"
svd_path        =  "/home/roger/.platformio/platforms/ststm32/misc/svd/STM32F103xx.svd"
compiler_type   =  "gcc"
targets         =  [
                     {
                       "name": "upload",
                       "group": "Platform",
                       "title": "Upload"
                     }
                   ]
extra           =  {
                     "flash_images": []
                   }

Environment: teensy41
=====================
build_type      =  "release"
env_name        =  "teensy41"
libsource_dirs  =  [
                     "/home/roger/pioprojects/ssd1306test/lib",
                     "/home/roger/pioprojects/ssd1306test/.pio/libdeps/teensy41",
                     "/home/roger/.platformio/lib",
                     "/home/roger/.platformio/packages/framework-arduinoteensy/libraries"
                   ]
defines         =  [
                     "PLATFORMIO=60114",
                     "__IMXRT1062__",
                     "ARDUINO_TEENSY41",
                     "USB_SERIAL",
                     "ARDUINO=10805",
                     "TEENSYDUINO=159",
                     "CORE_TEENSY",
                     "F_CPU=600000000",
                     "LAYOUT_US_ENGLISH"
                   ]
includes        =  {
                     "build": [
                       "/home/roger/pioprojects/ssd1306test/include",
                       "/home/roger/pioprojects/ssd1306test/src",
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/teensy41/Adafruit SSD1306",
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/teensy41/Adafruit GFX Library",
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/teensy41/Adafruit BusIO",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/SPI",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Wire",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Wire/utility",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/cores/teensy4"
                     ],
                     "compatlib": [
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/teensy41/Adafruit BusIO",
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/teensy41/Adafruit GFX Library",
                       "/home/roger/pioprojects/ssd1306test/.pio/libdeps/teensy41/Adafruit SSD1306",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/SPI",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Wire",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Wire/utility",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/ADC",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/AccelStepper/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Adafruit_NeoPixel",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Adafruit_STMPE610",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Adafruit_VS1053",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Adafruit_nRF8001",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Adafruit_nRF8001/utility",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/AltSoftSerial",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Artnet",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Audio",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Audio/utility",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Bounce",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Bounce2/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/CapacitiveSensor",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/CryptoAccel/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/DS1307RTC",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/DmxSimple",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/DogLcd",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/EEPROM",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/EasyTransfer/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/EasyTransferI2C/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Encoder",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Encoder/utility",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Entropy",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Ethernet/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FNET/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FastCRC",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FastLED/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FlexCAN",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FlexCAN_T4",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FlexIO_t4/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FlexiTimer2",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FreqCount",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FreqMeasure",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FreqMeasureMulti",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/FrequencyTimer2",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/ILI9341_t3",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/ILI9488_t3/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/IRremote/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Keypad/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/LedControl/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/LedDisplay",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/LiquidCrystal/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/LiquidCrystalFast",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/LittleFS/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/LowPower",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/MFRC522/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/MIDI/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Metro",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/MsTimer2",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/NXPMotionSense",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/NXPMotionSense/utility",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/NativeEthernet/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/OSC",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/OctoWS2811",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/OneWire",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/PS2Keyboard",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/PS2Keyboard/utility",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/PWMServo",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Ping",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/PulsePosition",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/QuadEncoder",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/RA8875/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/RadioHead",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/ResponsiveAnalogRead/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/SD/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/SPIFlash",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/ST7735_t3/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/SerialFlash",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Servo",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/ShiftPWM",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Snooze/src",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/SoftPWM",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/SoftwareSerial",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/TFT_ILI9163C",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Talkie",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/TeensyThreads",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Time",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/TimeAlarms",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/TimerOne",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/TimerThree",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/TinyGPS",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/Tlc5940",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/TouchScreen",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/USBHost_t36",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/USBHost_t36/utility",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/UTFT",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/VirtualWire",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/WS2812Serial",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/XBee",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/XPT2046_Touchscreen",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/i2c_t3",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/ks0108",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/ssd1351",
                       "/home/roger/.platformio/packages/framework-arduinoteensy/libraries/x10"
                     ],
                     "toolchain": [
                       "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi-teensy/arm-none-eabi/include/c++/11.3.1",
                       "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi-teensy/arm-none-eabi/include/c++/11.3.1/arm-none-eabi",
                       "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi-teensy/lib/gcc/arm-none-eabi/11.3.1/include-fixed",
                       "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi-teensy/lib/gcc/arm-none-eabi/11.3.1/include",
                       "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi-teensy/arm-none-eabi/include"
                     ]
                   }
cc_flags        =  [
                     "-Wall",
                     "-ffunction-sections",
                     "-fdata-sections",
                     "-mthumb",
                     "-mcpu=cortex-m7",
                     "-nostdlib",
                     "-mfloat-abi=hard",
                     "-mfpu=fpv5-d16",
                     "-O2"
                   ]
cxx_flags       =  [
                     "-std=gnu++17",
                     "-fno-exceptions",
                     "-felide-constructors",
                     "-fno-rtti",
                     "-std=gnu++17",
                     "-Wno-error=narrowing",
                     "-fpermissive",
                     "-fno-threadsafe-statics",
                     "-Wall",
                     "-ffunction-sections",
                     "-fdata-sections",
                     "-mthumb",
                     "-mcpu=cortex-m7",
                     "-nostdlib",
                     "-mfloat-abi=hard",
                     "-mfpu=fpv5-d16",
                     "-O2"
                   ]
cc_path         =  "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi-teensy/bin/arm-none-eabi-gcc"
cxx_path        =  "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi-teensy/bin/arm-none-eabi-g++"
gdb_path        =  "/home/roger/.platformio/packages/toolchain-gccarmnoneeabi-teensy/bin/arm-none-eabi-gdb"
prog_path       =  "/home/roger/pioprojects/ssd1306test/.pio/build/teensy41/firmware.elf"
svd_path        =  null
compiler_type   =  "gcc"
targets         =  [
                     {
                       "name": "upload",
                       "group": "Platform",
                       "title": "Upload"
                     }
                   ]
extra           =  {
                     "flash_images": []
                   }

How can this work if you’re build_unflags the old version?

Does the I2C Scanner sketch when compiled through PlatformIO detect any addresses?

Max,

Thanks for the quick response. I am confused by your reference to build_unflags. Looking at the build metadata I cannot see any reference to build_unflags. In the cxx_flags section -std=gnu++17 appears twice. So the one in my platformio is probably redundant.

I will have a look at the I2C scanner sketch.

My -std=gnu++17 is superflous.

cc_flags        =  [
                     "-std=gnu17",
                     "-mcpu=cortex-m3",
                     "-mthumb",
                     "-Os",
                     "-ffunction-sections",
                     "-fdata-sections",
                     "-nostdlib",
                     "--param",
                     "max-inline-insns-single=500"
                   ]
cxx_flags       =  [
                     "-std=gnu++17",
                     "-fno-threadsafe-statics",
                     "-fno-rtti",
                     "-fno-exceptions",
                     "-fno-use-cxa-atexit",
                     "-mcpu=cortex-m3",
                     "-mthumb",
                     "-Os",
                     "-ffunction-sections",
                     "-fdata-sections",
                     "-nostdlib",
                     "--param",
                     "max-inline-insns-single=500"
                   ]

The I2C scanner sketch compiles and runs but does not find any devices. Which is not surprising as the my logical analyser does not detect any signals on the SDA and SCL pads.

And what Arduino core version do you use in the Arduino IDE? (Tools → Boards → Board Manager → Teensy)

The version of the teensy arduino framework install in the Arduino IDE is 1.59.0.

Looking at the version in platformio I realise I have been misreading it.

In .platformio/packages/framework-arduinoteensy/package.json the version number is given as 1.159.0. I read it as 1.59.0. I do not know if that is of any significance.

That should be the same. Delete .platformio/packages/framework-arduinoteensy/ again upload the project again. Maybe there are local modificatoins.

Did that. This is the output from the log.

Tool Manager: Installing platformio/framework-arduinoteensy @ ~1.159.0
Downloading  [####################################]  100%          
Unpacking  [####################################]  100%
Tool Manager: framework-arduinoteensy@1.159.0 has been installed!
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/teensy/teensy41.html
PLATFORM: Teensy (5.0.0) > Teensy 4.1
HARDWARE: IMXRT1062 600MHz, 512KB RAM, 7.75MB Flash
DEBUG: Current (jlink) External (jlink)
PACKAGES: 
 - framework-arduinoteensy @ 1.159.0 (1.59) 
 - tool-teensy @ 1.159.0 (1.59) 
 - toolchain-gccarmnoneeabi-teensy @ 1.110301.0 (11.3.1)

I have now produced a very simple test arduino sketch and corresponding platformio project. The code is both is identical.

#include <Arduino.h>
#include <Wire.h>

void setup()
{

while (!Serial); // Wait for serial to be ready

Serial.printf("Serial is ready!\n");

Wire.begin();
}


void loop()
{
    Serial.printf("Looking for device 0x3c\n");

    Wire.beginTransmission(0x3c);
    if (0 == Wire.endTransmission())
        Serial.printf("Device 0x3c found\n");
    else
        Serial.printf("Device 0x3c not found\n");

    delay(5000); // wait 5 seconds for next scan
}

You can find the platformIO project at i2ctest

The Arduino sketch works, the platformIO project fails.

I am running out of ideas.

This is the test rig I am using

And can you show a screenshot of the Arduino IDE → Tools menu?

Finally found the problem. A rogue cached copy of the file WireIMXRT.cpp was being used.