@shawn - I have been playing with QNEthernet and T4_WIFI_CYW4343W. Started off with an initial setup in "driver_select.h":
Code:
// SPDX-FileCopyrightText: (c) 2024-2025 Shawn Silverman <shawn@pobox.com>
// SPDX-License-Identifier: AGPL-3.0-or-later
// driver_select.h chooses a driver header to include.
// This file is part of the QNEthernet library.
#pragma once
#include "qnethernet_opts.h"
// --------------------------------------------------------------------------
// External Driver
// --------------------------------------------------------------------------
// First check for the existence of an external driver
// https://forum.pjrc.com/index.php?threads/new-lwip-based-ethernet-library-for-teensy-4-1.68066/post-345539
#if defined(__has_include)
// https://gcc.gnu.org/onlinedocs/cpp/_005f_005fhas_005finclude.html
#if __has_include(<qnethernet_external_driver.h>)
#include "qnethernet/drivers/qnethernet_external_driver.h"
#define QNETHERNET_INTERNAL_DRIVER_EXTERNAL
#endif // __has_include(<qnethernet_external_driver.h>)
#endif // defined(__has_include)
// --------------------------------------------------------------------------
// No External Driver
// --------------------------------------------------------------------------
// Don't include anything else if an external driver has been included
#ifndef QNETHERNET_INTERNAL_DRIVER_EXTERNAL
#if defined(QNETHERNET_DRIVER_W5500)
#include "qnethernet/drivers/driver_w5500.h"
#define QNETHERNET_INTERNAL_DRIVER_W5500
#endif
#if ARDUINO_TEENSY41_CYW4343W
#include "qnethernet/drivers/driver_CYW4343W.h"
#define QNETHERNET_INTERNAL_DRIVER_CYW4343W
#elif defined(ARDUINO_TEENSY41)
#include "qnethernet/drivers/driver_teensy41.h"
#define QNETHERNET_INTERNAL_DRIVER_TEENSY41
#else
#include "qnethernet/drivers/driver_unsupported.h"
#define QNETHERNET_INTERNAL_DRIVER_UNSUPPORTED
#endif // Driver selection
#endif // QNETHERNET_INTERNAL_DRIVER_EXTERNAL
Then added this to the beginning of "qnethernet_opts.h":
Code:
// Disables T41 native ethernet IF and enables T41 and CYW4343W IF.
#ifndef ARDUINO_TEENSY41_CYW4343W
#define ARDUINO_TEENSY41_CYW4343W 1
#endif
This prevents any conflict with "ARDUINO_TEENSY41" and makes the CYW4343W driver version unique. Set to 0 for native ethernet an set to 1 for CYW4343W usage. I tested both.
I tried going the external driver route but that failed for me.
I then tracked down the initialization sequence and started setting up the QNEthernet driver, "driver_CYW4343W.cpp" and "driver_CYW4343W.h". For right now I want to keep the T4_WIFI_CYW4343W library separate from the QNEthernet library until it is trimmed down to the bare minimum needed.
There is one more layer that has to be added to use the CYW4343W and that is joining the network which also sets up the link status. This uses a poll function in the events class to monitor the state of the link and can be checked any time using "link_check()". I have added evt.pollEvents() to the QNEthernet "driver_poll()" function.
The initialization output:
Code:
Starting...
[Start]
Starting Ethernet with DHCP...
driver_has_hardware
===========================
CYW4343W Card::begin: SDIO2
===========================
Attaching OOB interrupt to pin 34
Enabled CYW4343W bus high speed interface
BUS_IORDY_REG (Ready indication) returned OK
SDHC bus set to 4-bit, speed set to 33MHz
*************
CardID: 43430
*************
Set SRAM_IOCTRL_REG validated
Set SRAM_IOCTRL_REG second validation
Set SRAM_RESETCTRL_REG validated
Uploading firmware data
Uploaded firmware, 419798 of 419798 bytes
Uploading NVRAM data
Uploaded NVRAM, 680 of 680 bytes
Set BAK_CHIP_CLOCK_CSR_REG validated
Set BUS_IORDY_REG validated
Configuring WL_IRQ OOB
==============================
End W4343WCard::begin: SDIO2
==============================
EthernetClass::start()
enet_init()
driver_init
Uploading CLM, size: 7222
CLM uploaded 7222/7222 result: 1
CLM version API: 12.2
Data: 9.10.39
Compiler: 1.29.4
ClmImport: 1.36.3
Creation: 2020-02-16 22:32:13
Initialization Done
In joinNetworks
WiFi CPU running
Set country succesfully
Join events enabled
Joining network wswn
driver_set_mac
driver_get_mac
driver_get_mac
MAC = 70:87:a7:10:64:b5
********************* LINK Established *********************
********************* Joined Network ***********************
The MAC address is hard coded in the CYW4343W chip and is only available after the chip has been initialized, but as you can see it is working.
There is a lot more to learn and setup in the rest of the driver and I am not sure about how to do it
I'll keep playing with it

The library I am using for the CYW4343W is
here...