Teensy 4.1 Beta Test

Speaking of the USB host connection, the Teensy 3.6 had solder pads that I could choose whether to power the remote USB host devices using the 5v VIN/VUSB power from the Teensy, or not provide the power (assuming it is connected to something like a USB powered hub). I'm not seeing such pads on the 4.1 beta. So I assume if somebody wanted to do it, they would need to mount something on the 5 pins, with a switch to connect/disconnect the Teensy power from the 5v source in the USB host (possibly with an external power connection). Is this right? I should note, that at this stage, I'm mostly curious, and I don't need to do the connection.

And speaking of the ethernet PCB, it would be helpful if you had a parts list for the cable, etc.
 
Alright I just pushed an update to my FNET fork, there is a new example already setup to use with FBENCH to do speed tests.

This is my average speed for large TCP transfers and seems to be the max: Screen Shot 2020-05-04 at 4.44.10 PM.png
Keep in mind this speed test doesn't account for the overhead of TCP packets so it likely is reaching the 100Mb speeds it should be.
 
@vjmuzik: Seems to build and work here - just getting to test. Got Java fault from IDE SerMon - going to go post there
 
Okay - back here. It works on T_4.1 with PJRC MagJack!

Somehow I got 101,141.952 on FBench with 1,000 packets of 4096! Though sketch reports more like:
Looped: 40566111 LoopedPoll: 1001 FNETMemFree: 162936 Link: 1
Megabytes: 4.096000 Seconds: 0.3410 KBits/Sec: 96093.8416
Looped: 39117939 LoopedPoll: 1001 FNETMemFree: 162936 Link: 1

FNET_T41Native.png
 
So I believe everything is setup correctly, to my knowledge the receive frame uses an interrupt and then the stack just has to be polled every 1-100ms (the less the better). In my example I just have fnet_poll() being called from a separate thread, but if you don't need multithreading support you can just have it setup using any interrupt timer.
 
I'm doing simple regression testing with a dozen or so of my lab setups, just to make sure interfaces and all look good. I just tested the BNO080 IMU with the Sparkfun lib over I2C, all looks good to me. Here's and example of the PRY output, Exp 17 in the lib.

-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
-0.7,1.3,-124.4
 

Attachments

  • IMG_3734.JPG
    IMG_3734.JPG
    130.2 KB · Views: 152
@vjmuzik - is this the same USBHost usable code base now with Native ethernet support?
Don't have that in front of me - wondering how the "Looped: 40,566,093" STATS value compares?
 
The USBHost is really it's own library, but I made a way for it to hook into the FNET library, so anything that you may have made with FNET before that worked with the USBHost Ethernet will work with the native Ethernet.
 
Ok just finished a new T4.1 breakout board to test a few of the different displays. Getting ready to order them and then debug. Here is a screen shot. Unfortunately the RA8875/76 is setup for capacitive touch - sorry @wwatson.

View attachment 19983

Yes added pins for a Sparkfun QWIIC adapter board. Not sure if I need anything else just for Testing displays.

This is great I am planning to order another 10.1" from BuyDisplay with capacitive touch. Will you be selling these?
 
The USBHost is really it's own library, but I made a way for it to hook into the FNET library, so anything that you may have made with FNET before that worked with the USBHost Ethernet will work with the native Ethernet.

Returned to that thread :: pjrc.com/threads/57701-USB-Host-Ethernet-Driver
Found this old output showing a much smaller "Looped: 10,682,212 " - at that is OC'd to 816 MHz - assuming it is measuring apples to apples in the loop.
Code:
 F_CPU=816000000	deg  C=44
Megabytes: 0.127200  Seconds: 0.0440  KBits/Sec: 23127.2727
Looped: 10682212  LoopedUSB: 1911  FNETMemFree: 130200  LinkSpeed: 100BASE

I can't get a USBHost compile there right now with files on hand - something missing from FNET dated 10/10/2019?
 
Same issue for Mouse.h. Removing Mouse.h and Keyboard.h allows the KeyboardAndMouseControl sketch to compile and run.

Code:
Arduino: 1.8.12 (Linux), TD: 1.52-beta3, Board: "Teensy 4.1, Serial + Keyboard + Mouse + Joystick, 600 MHz, Faster, US English"


/home/corbett/arduino-1.8.12/arduino-builder -dump-prefs -logger=machine -hardware /home/corbett/arduino-1.8.12/hardware -hardware /home/corbett/.arduino15/packages -tools /home/corbett/arduino-1.8.12/tools-builder -tools /home/corbett/arduino-1.8.12/hardware/tools/avr -tools /home/corbett/.arduino15/packages -built-in-libraries /home/corbett/arduino-1.8.12/libraries -libraries /home/corbett/Arduino/libraries -fqbn=teensy:avr:teensy41:usb=serialhid,speed=600,opt=o2std,keys=en-us -ide-version=10812 -build-path /tmp/arduino_build_273372 -warnings=all -build-cache /tmp/arduino_cache_909095 -verbose /tmp/arduino_modified_sketch_556381/KeyboardAndMouseControl.ino
/home/corbett/arduino-1.8.12/arduino-builder -compile -logger=machine -hardware /home/corbett/arduino-1.8.12/hardware -hardware /home/corbett/.arduino15/packages -tools /home/corbett/arduino-1.8.12/tools-builder -tools /home/corbett/arduino-1.8.12/hardware/tools/avr -tools /home/corbett/.arduino15/packages -built-in-libraries /home/corbett/arduino-1.8.12/libraries -libraries /home/corbett/Arduino/libraries -fqbn=teensy:avr:teensy41:usb=serialhid,speed=600,opt=o2std,keys=en-us -ide-version=10812 -build-path /tmp/arduino_build_273372 -warnings=all -build-cache /tmp/arduino_cache_909095 -verbose /tmp/arduino_modified_sketch_556381/KeyboardAndMouseControl.ino
Using board 'teensy41' from platform in folder: /home/corbett/arduino-1.8.12/hardware/teensy/avr
Using core 'teensy4' from platform in folder: /home/corbett/arduino-1.8.12/hardware/teensy/avr
Warning: Board microduino:avr:mddevice doesn't define a 'build.board' preference. Auto-set to: AVR_MDDEVICE
Detecting libraries used...
/home/corbett/arduino-1.8.12/hardware/teensy/../tools/arm/bin/arm-none-eabi-g++ -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=152 -DARDUINO=10812 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL_HID -DLAYOUT_US_ENGLISH -I/home/corbett/arduino-1.8.12/hardware/teensy/avr/cores/teensy4 /tmp/arduino_build_273372/sketch/KeyboardAndMouseControl.ino.cpp -o /dev/null
Alternatives for Mouse.h: [Mouse@1.0.1]
ResolveLibrary(Mouse.h)
  -> candidates: [Mouse@1.0.1]
/home/corbett/arduino-1.8.12/hardware/teensy/../tools/arm/bin/arm-none-eabi-g++ -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=152 -DARDUINO=10812 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL_HID -DLAYOUT_US_ENGLISH -I/home/corbett/arduino-1.8.12/hardware/teensy/avr/cores/teensy4 -I/home/corbett/arduino-1.8.12/libraries/Mouse/src /tmp/arduino_build_273372/sketch/KeyboardAndMouseControl.ino.cpp -o /dev/null
Alternatives for HID.h: []
ResolveLibrary(HID.h)In file included from /tmp/arduino_modified_sketch_556381/KeyboardAndMouseControl.ino:25:0:


  -> candidates: []
/home/corbett/arduino-1.8.12/libraries/Mouse/src/Mouse.h:25:17: fatal error: HID.h: No such file or directory
compilation terminated.
Using library Mouse at version 1.0.1 in folder: /home/corbett/arduino-1.8.12/libraries/Mouse 
Error compiling for board Teensy 4.1.
 
USBHost Ethernet should now be fixed for Teensy 3.6-4.1, I had to rename the interface so it would be possible to support native ethernet and usb ethernet at the same time.
 
USBHost Ethernet should now be fixed for Teensy 3.6-4.1, I had to rename the interface so it would be possible to support native ethernet and usb ethernet at the same time.

Sample : T:\tCode\libraries\FNET\examples\ASIXEthernet_Test { same results from local sketches last used }

I updated from : github.com/vjmuzik/TeensyASIXEthernet and https://github.com/vjmuzik/FNET

Code:
Building Sketch: ".\Functions.ino"
Using board 'teensy41' from platform in folder: T:\arduino-1.8.12\hardware\teensy\avr
Using core 'teensy4' from platform in folder: T:\arduino-1.8.12\hardware\teensy\avr
Detecting libraries used...
"T:\\arduino-1.8.12\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=152 -DARDUINO=10600 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\cores\\teensy4" "T:\\TEMP\\arduino_build_Functions.ino\\sketch\\Functions.ino.cpp" -o nul
Alternatives for USBHost_t36.h: [USBHost_t36@0.1]
ResolveLibrary(USBHost_t36.h)
  -> candidates: [USBHost_t36@0.1]
"T:\\arduino-1.8.12\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=152 -DARDUINO=10600 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\cores\\teensy4" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\libraries\\USBHost_t36" "T:\\TEMP\\arduino_build_Functions.ino\\sketch\\Functions.ino.cpp" -o nul
Alternatives for ASIXEthernet.h: [TeensyASIXEthernet]
ResolveLibrary(ASIXEthernet.h)
  -> candidates: [TeensyASIXEthernet]
"T:\\arduino-1.8.12\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=152 -DARDUINO=10600 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\cores\\teensy4" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\libraries\\USBHost_t36" "-IT:\\tCode\\libraries\\TeensyASIXEthernet" "T:\\TEMP\\arduino_build_Functions.ino\\sketch\\Functions.ino.cpp" -o nul
Alternatives for TeensyThreads.h: [TeensyThreads@1.0.1]
ResolveLibrary(TeensyThreads.h)
  -> candidates: [TeensyThreads@1.0.1]
"T:\\arduino-1.8.12\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=152 -DARDUINO=10600 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\cores\\teensy4" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\libraries\\USBHost_t36" "-IT:\\tCode\\libraries\\TeensyASIXEthernet" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\libraries\\TeensyThreads" "T:\\TEMP\\arduino_build_Functions.ino\\sketch\\Functions.ino.cpp" -o nul
Alternatives for fnet.h: [FNET@0.1.3]
ResolveLibrary(fnet.h)
  -> candidates: [FNET@0.1.3]
"T:\\arduino-1.8.12\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=152 -DARDUINO=10600 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\cores\\teensy4" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\libraries\\USBHost_t36" "-IT:\\tCode\\libraries\\TeensyASIXEthernet" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\libraries\\TeensyThreads" "-IT:\\tCode\\libraries\\FNET\\src" "T:\\TEMP\\arduino_build_Functions.ino\\sketch\\Functions.ino.cpp" -o nul
"T:\\arduino-1.8.12\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -

[B][U]// …[/U][/B]

1.8.12\\hardware\\teensy\\avr\\libraries\\TeensyThreads" "-IT:\\tCode\\libraries\\FNET\\src" "T:\\tCode\\libraries\\FNET\\src\\stack\\fnet_wifi.c" -o nul
Generating function prototypes...
"T:\\arduino-1.8.12\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=152 -DARDUINO=10600 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\cores\\teensy4" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\libraries\\USBHost_t36" "-IT:\\tCode\\libraries\\TeensyASIXEthernet" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\libraries\\TeensyThreads" "-IT:\\tCode\\libraries\\FNET\\src" "T:\\TEMP\\arduino_build_Functions.ino\\sketch\\Functions.ino.cpp" -o "T:\\TEMP\\arduino_build_Functions.ino\\preproc\\ctags_target_for_gcc_minus_e.cpp"
"T:\\arduino-1.8.12\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "T:\\TEMP\\arduino_build_Functions.ino\\preproc\\ctags_target_for_gcc_minus_e.cpp"
Compiling sketch...
"T:\\arduino-1.8.12\\hardware\\teensy/../tools/precompile_helper" "T:\\arduino-1.8.12\\hardware\\teensy\\avr/cores/teensy4" "T:\\TEMP\\arduino_build_Functions.ino" "T:\\arduino-1.8.12\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -x c++-header -O2 -g -Wall -ffunction-sections -fdata-sections -nostdlib -MMD -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=152 -DARDUINO=10600 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr/cores/teensy4" "T:\\TEMP\\arduino_build_Functions.ino/pch/Arduino.h" -o "T:\\TEMP\\arduino_build_Functions.ino/pch/Arduino.h.gch"
"T:\\arduino-1.8.12\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -c -O2 -g -Wall -ffunction-sections -fdata-sections -nostdlib -MMD -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=152 -DARDUINO=10600 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IT:\\TEMP\\arduino_build_Functions.ino/pch" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\cores\\teensy4" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\libraries\\USBHost_t36" "-IT:\\tCode\\libraries\\TeensyASIXEthernet" "-IT:\\arduino-1.8.12\\hardware\\teensy\\avr\\libraries\\TeensyThreads" "-IT:\\tCode\\libraries\\FNET\\src" "T:\\TEMP\\arduino_build_Functions.ino\\sketch\\Functions.ino.cpp" -o "T:\\TEMP\\arduino_build_Functions.ino\\sketch\\Functions.ino.cpp.o"
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:26:32: error: variable or field 'dhcp_cln_callback_updated' declared void
 void dhcp_cln_callback_updated(fnet_dhcp_cln_desc_t _dhcp_desc, fnet_netif_desc_t netif, void *p ) { //Called when DHCP updates
                                ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:26:32: error: 'fnet_dhcp_cln_desc_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:26:65: error: 'fnet_netif_desc_t' was not declared in this scope
 void dhcp_cln_callback_updated(fnet_dhcp_cln_desc_t _dhcp_desc, fnet_netif_desc_t netif, void *p ) { //Called when DHCP updates
                                                                 ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:26:90: error: expected primary-expression before 'void'
 void dhcp_cln_callback_updated(fnet_dhcp_cln_desc_t _dhcp_desc, fnet_netif_desc_t netif, void *p ) { //Called when DHCP updates
                                                                                          ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:147:19: error: variable or field 'handleOutput' declared void
 void handleOutput(fnet_netif_t *netif, fnet_netbuf_t *nb) { //Called when a message is sent
                   ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:147:19: error: 'fnet_netif_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:147:33: error: 'netif' was not declared in this scope
 void handleOutput(fnet_netif_t *netif, fnet_netbuf_t *nb) { //Called when a message is sent
                                 ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:147:40: error: 'fnet_netbuf_t' was not declared in this scope
 void handleOutput(fnet_netif_t *netif, fnet_netbuf_t *nb) { //Called when a message is sent
                                        ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:147:55: error: 'nb' was not declared in this scope
 void handleOutput(fnet_netif_t *netif, fnet_netbuf_t *nb) { //Called when a message is sent
                                                       ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:256:26: error: variable or field 'handleGetMACAddress' declared void
 void handleGetMACAddress(fnet_mac_addr_t * hw_addr) { //Gets called everytime a message is sent
                          ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:256:26: error: 'fnet_mac_addr_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:256:44: error: 'hw_addr' was not declared in this scope
 void handleGetMACAddress(fnet_mac_addr_t * hw_addr) { //Gets called everytime a message is sent
                                            ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:277:20: error: variable or field 'handlePHYRead' declared void
 void handlePHYRead(fnet_uint32_t reg_addr, fnet_uint16_t *data) { //Could be called, don't think it works correctly
                    ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:277:20: error: 'fnet_uint32_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:277:44: error: 'fnet_uint16_t' was not declared in this scope
 void handlePHYRead(fnet_uint32_t reg_addr, fnet_uint16_t *data) { //Could be called, don't think it works correctly
                                            ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:277:59: error: 'data' was not declared in this scope
 void handlePHYRead(fnet_uint32_t reg_addr, fnet_uint16_t *data) { //Could be called, don't think it works correctly
                                                           ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:285:21: error: variable or field 'handlePHYWrite' declared void
 void handlePHYWrite(fnet_uint32_t reg_addr, fnet_uint16_t data) { //Could be called, might work correctly
                     ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:285:21: error: 'fnet_uint32_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:285:45: error: 'fnet_uint16_t' was not declared in this scope
 void handlePHYWrite(fnet_uint32_t reg_addr, fnet_uint16_t data) { //Could be called, might work correctly
                                             ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:291:26: error: variable or field 'handleMulticastJoin' declared void
 void handleMulticastJoin(fnet_netif_t *netif, fnet_mac_addr_t multicast_addr) { //Called when joining multicast group
                          ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:291:26: error: 'fnet_netif_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:291:40: error: 'netif' was not declared in this scope
 void handleMulticastJoin(fnet_netif_t *netif, fnet_mac_addr_t multicast_addr) { //Called when joining multicast group
                                        ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:291:47: error: 'fnet_mac_addr_t' was not declared in this scope
 void handleMulticastJoin(fnet_netif_t *netif, fnet_mac_addr_t multicast_addr) { //Called when joining multicast group
                                               ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:310:27: error: variable or field 'handleMulticastLeave' declared void
 void handleMulticastLeave(fnet_netif_t *netif, fnet_mac_addr_t multicast_addr) { //Called when leaving multicast group
                           ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:310:27: error: 'fnet_netif_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:310:41: error: 'netif' was not declared in this scope
 void handleMulticastLeave(fnet_netif_t *netif, fnet_mac_addr_t multicast_addr) { //Called when leaving multicast group
                                         ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:310:48: error: 'fnet_mac_addr_t' was not declared in this scope
 void handleMulticastLeave(fnet_netif_t *netif, fnet_mac_addr_t multicast_addr) { //Called when leaving multicast group
                                                ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:335:1: error: 'fnet_bool_t' does not name a type
 fnet_bool_t handleIsConnected() {
 ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:363:44: error: variable or field 'bench_srv_callback_session_end' declared void
 static void bench_srv_callback_session_end(fnet_bench_srv_desc_t desc, const struct fnet_bench_srv_result *bench_srv_result, void *cookie) {
                                            ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:363:44: error: 'fnet_bench_srv_desc_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:363:72: error: expected primary-expression before 'const'
 static void bench_srv_callback_session_end(fnet_bench_srv_desc_t desc, const struct fnet_bench_srv_result *bench_srv_result, void *cookie) {
                                                                        ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:363:126: error: expected primary-expression before 'void'
 static void bench_srv_callback_session_end(fnet_bench_srv_desc_t desc, const struct fnet_bench_srv_result *bench_srv_result, void *cookie) {
                                                                                                                              ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:508:44: error: variable or field 'bench_cln_callback_session_end' declared void
 static void bench_cln_callback_session_end(fnet_bench_cln_desc_t bench_cln_desc, const fnet_bench_cln_result_t *bench_cln_result, void *cookie){
                                            ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:508:44: error: 'fnet_bench_cln_desc_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:508:82: error: expected primary-expression before 'const'
 static void bench_cln_callback_session_end(fnet_bench_cln_desc_t bench_cln_desc, const fnet_bench_cln_result_t *bench_cln_result, void *cookie){
                                                                                  ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:508:131: error: expected primary-expression before 'void'
 static void bench_cln_callback_session_end(fnet_bench_cln_desc_t bench_cln_desc, const fnet_bench_cln_result_t *bench_cln_result, void *cookie){
                                                                                                                                   ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:31:1: error: 'fnet_return_t' does not name a type
 fnet_return_t teensy_mutex_init(fnet_mutex_t *mutex) {
 ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:45:27: error: variable or field 'teensy_mutex_release' declared void
 void teensy_mutex_release(fnet_mutex_t *mutex) {
                           ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:45:27: error: 'fnet_mutex_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:45:41: error: 'mutex' was not declared in this scope
 void teensy_mutex_release(fnet_mutex_t *mutex) {
                                         ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:51:24: error: variable or field 'teensy_mutex_lock' declared void
 void teensy_mutex_lock(fnet_mutex_t *mutex) {
                        ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:51:24: error: 'fnet_mutex_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:51:38: error: 'mutex' was not declared in this scope
 void teensy_mutex_lock(fnet_mutex_t *mutex) {
                                      ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:69:26: error: variable or field 'teensy_mutex_unlock' declared void
 void teensy_mutex_unlock(fnet_mutex_t *mutex) {
                          ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:69:26: error: 'fnet_mutex_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:69:40: error: 'mutex' was not declared in this scope
 void teensy_mutex_unlock(fnet_mutex_t *mutex) {
                                        ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:94:1: error: 'fnet_time_t' does not name a type
 fnet_time_t timer_get_ms(void){ //Used for multi-thread version
 ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino: In function 'void usbthread()':
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:6:5: error: 'myusb' was not declared in this scope
     myusb.Task();
     ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:7:5: error: 'asix1' was not declared in this scope
     asix1.read();
     ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:9:34: error: 'current_netif' was not declared in this scope
     if(fnet_netif_is_initialized(current_netif)){
                                  ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:9:47: error: 'fnet_netif_is_initialized' was not declared in this scope
     if(fnet_netif_is_initialized(current_netif)){
                                               ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:10:17: error: 'fnet_poll' was not declared in this scope
       fnet_poll();
                 ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:11:25: error: 'fnet_service_poll' was not declared in this scope
       fnet_service_poll();
                         ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:20:7: error: 'threads' was not declared in this scope
       threads.yield();
       ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino: At global scope:
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:26:32: error: variable or field 'dhcp_cln_callback_updated' declared void
 void dhcp_cln_callback_updated(fnet_dhcp_cln_desc_t _dhcp_desc, fnet_netif_desc_t netif, void *p ) { //Called when DHCP updates
                                ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:26:32: error: 'fnet_dhcp_cln_desc_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:26:65: error: 'fnet_netif_desc_t' was not declared in this scope
 void dhcp_cln_callback_updated(fnet_dhcp_cln_desc_t _dhcp_desc, fnet_netif_desc_t netif, void *p ) { //Called when DHCP updates
                                                                 ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:26:90: error: expected primary-expression before 'void'
 void dhcp_cln_callback_updated(fnet_dhcp_cln_desc_t _dhcp_desc, fnet_netif_desc_t netif, void *p ) { //Called when DHCP updates
                                                                                          ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino: In function 'void checkLink()':
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:83:6: error: 'asix1' was not declared in this scope
   if(asix1.connected && fnet_dhcp_cln_is_enabled(dhcp_desc)){
      ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:83:50: error: 'dhcp_desc' was not declared in this scope
   if(asix1.connected && fnet_dhcp_cln_is_enabled(dhcp_desc)){
                                                  ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:83:59: error: 'fnet_dhcp_cln_is_enabled' was not declared in this scope
   if(asix1.connected && fnet_dhcp_cln_is_enabled(dhcp_desc)){
                                                           ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:87:33: error: aggregate 'checkLink()::fnet_init_params init_params' has incomplete type and cannot be defined
     struct fnet_init_params     init_params;
                                 ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:89:18: error: 'fnet_timer_api_t' does not name a type
     static const fnet_timer_api_t timer_api = { //Setup multi-thread timer
                  ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:94:31: error: 'stack_heap' was not declared in this scope
     init_params.netheap_ptr = stack_heap;
                               ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:96:30: error: 'teensy_mutex_api' was not declared in this scope
     init_params.mutex_api = &teensy_mutex_api;
                              ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:97:30: error: 'timer_api' was not declared in this scope
     init_params.timer_api = &timer_api;
                              ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:99:31: error: 'fnet_init' was not declared in this scope
     if (fnet_init(&init_params) != FNET_ERR) {
                               ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:99:36: error: 'FNET_ERR' was not declared in this scope
     if (fnet_init(&init_params) != FNET_ERR) {
                                    ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:104:26: error: 'FNET_CPU_USB0_IF' was not declared in this scope
       if(fnet_netif_init(FNET_CPU_USB0_IF, MacAddress, 6) != FNET_ERR){
                          ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:104:44: error: 'MacAddress' was not declared in this scope
       if(fnet_netif_init(FNET_CPU_USB0_IF, MacAddress, 6) != FNET_ERR){
                                            ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:104:57: error: 'fnet_netif_init' was not declared in this scope
       if(fnet_netif_init(FNET_CPU_USB0_IF, MacAddress, 6) != FNET_ERR){
                                                         ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:106:13: error: 'current_netif' was not declared in this scope
         if((current_netif = fnet_netif_get_default()) == 0){
             ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:106:52: error: 'fnet_netif_get_default' was not declared in this scope
         if((current_netif = fnet_netif_get_default()) == 0){
                                                    ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:111:57: error: 'fnet_memset_zero' was not declared in this scope
           fnet_memset_zero(&dhcp_desc, sizeof(dhcp_desc));
                                                         ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:112:29: error: 'dhcp_params' was not declared in this scope
           fnet_memset_zero(&dhcp_params, sizeof(dhcp_params));
                             ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:115:58: error: 'fnet_dhcp_cln_init' was not declared in this scope
           if((dhcp_desc = fnet_dhcp_cln_init(&dhcp_params))){
                                                          ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:117:60: error: 'dhcp_cln_callback_updated' was not declared in this scope
              fnet_dhcp_cln_set_callback_updated(dhcp_desc, dhcp_cln_callback_updated, (void*)dhcp_desc);
                                                            ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:117:103: error: 'fnet_dhcp_cln_set_callback_updated' was not declared in this scope
              fnet_dhcp_cln_set_callback_updated(dhcp_desc, dhcp_cln_callback_updated, (void*)dhcp_desc);
                                                                                                       ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:118:104: error: 'fnet_dhcp_cln_set_callback_discover' was not declared in this scope
              fnet_dhcp_cln_set_callback_discover(dhcp_desc, dhcp_cln_callback_updated, (void*)dhcp_desc);
                                                                                                        ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:137:36: error: 'fnet_dhcp_cln_release' was not declared in this scope
     fnet_dhcp_cln_release(dhcp_desc);
                                    ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:138:50: error: 'fnet_memset_zero' was not declared in this scope
     fnet_memset_zero(dhcp_desc, sizeof(dhcp_desc));
                                                  ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:140:18: error: 'fnet_release' was not declared in this scope
     fnet_release();
                  ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino: At global scope:
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:147:19: error: variable or field 'handleOutput' declared void
 void handleOutput(fnet_netif_t *netif, fnet_netbuf_t *nb) { //Called when a message is sent
                   ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:147:19: error: 'fnet_netif_t' was not declared in this scope
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:147:33: error: 'netif' was not declared in this scope
 void handleOutput(fnet_netif_t *netif, fnet_netbuf_t *nb) { //Called when a message is sent
                                 ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:147:40: error: 'fnet_netbuf_t' was not declared in this scope
 void handleOutput(fnet_netif_t *netif, fnet_netbuf_t *nb) { //Called when a message is sent
                                        ^
T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\Functions.ino:147:55: error: 'nb' was not declared in this scope
 void handleOutput(fnet_netif_t *netif, fnet_netbuf_t *nb) { //Called when a message is sent
                                                       ^
In file included from T:\tCode\libraries\FNET\src/stack/fnet_socket.h:30:0,
                 from T:\tCode\libraries\FNET\src/stack/fnet_stack.h:32,
                 from T:\tCode\libraries\FNET\src/fnet.h:36,
                 from T:\tCode\libraries\FNET\examples\ASIXEthernet_Test\ASIXEthernet_Test.ino:7:
T:\tCode\libraries\FNET\src/stack/fnet_ip6.h:35:8: error: expected declaration before end of line
 FNET_COMP_PACKED_BEGIN
        ^
Using library USBHost_t36 at version 0.1 in folder: T:\arduino-1.8.12\hardware\teensy\avr\libraries\USBHost_t36 
Using library TeensyASIXEthernet in folder: T:\tCode\libraries\TeensyASIXEthernet (legacy)
Using library TeensyThreads at version 1.0.1 in folder: T:\arduino-1.8.12\hardware\teensy\avr\libraries\TeensyThreads 
Using library FNET at version 0.1.3 in folder: T:\tCode\libraries\FNET 
exit status 1
[Finished in 13.3s with exit code 1]
[shell_cmd: .\Compile.cmd 1]
[dir: T:\tCode\libraries\FNET\examples\ASIXEthernet_Test]
// …
 
IMG_3736.JPG

Completed next regression test, BNO080 on SPI. Looks fine, running Sparkfun BNO080 lib, sample quaternion output:

.01,-0.02,0.44,0.90,3.14,19.89Hz
0.01,-0.02,0.44,0.90,3.14,19.89Hz
0.01,-0.03,0.44,0.90,3.14,19.89Hz
-0.00,-0.03,0.44,0.90,3.14,19.89Hz
-0.00,-0.03,0.44,0.90,3.14,19.89Hz
-0.00,-0.03,0.44,0.90,3.14,19.89Hz
-0.00,-0.03,0.44,0.90,3.14,19.89Hz
0.00,-0.03,0.44,0.90,3.14,19.89Hz
0.00,-0.03,0.44,0.90,3.14,19.90Hz
0.00,-0.03,0.44,0.90,3.14,19.90Hz
0.00,-0.03,0.44,0.90,3.14,19.90Hz
0.00,-0.03,0.44,0.90,3.14,19.90Hz
0.00,-0.03,0.44,0.90,3.14,19.90Hz
 
I have a few more beta 4.1 boards available. Again, these are only for people on the list on msg #1. Two of them are the earliest hand soldered (except the BGA) beta boards, so all the pins probably work (including all power & ground) but they had less rigorous testing because the bed-of-nails test didn't exist at that time.

If you're on the list and want to jump into the beta test, email me as mentioned in msg #1.
 
I can also confirm PJRC will be selling the RAM chip (for $1 - as a separate item DIY soldering required) when we release Teensy 4.1. Hopefully that will make things easier.
I wonder, whether down the road whether it would be worth it to sell Teensy 4.1's at an extra cost with the ram and/or flash chips soldered on to the board, much like you do with boards with pre-soldered pins.

Note, I'm talking about much later, when the stay at home restrictions are lifted. I don't want to cause more work now.

As I've mentioned before, one of the reasons I gravitated towards the Teensy during the first kickstarter, was I was pretty bad at soldering. I have gotten better over the years, and in fact I'm about to go and solder a flash chip on to my Teensy 4.1 I have to imagine there is a market for chips with larger flash memories (and psram as well), but I don't have a handle on how big the market is. It may be rather tiny, or perhaps it may open up new doors for Teensy 4.1 sales.

Of course it doesn't have to be something PJRC.COM does. I could imagine small shops buying the Teensys doing the soldering and selling the board with soldering at a markup. I would suspect also including the Audio Shield, since I do seem things every so often on people getting nervous about the small amount of through hole soldering for the audio shield. However, I really can't see a price point where it would allow the store to make any money that most people would be willing to buy.

Note below, take every thing I say with a grain of salt. My role in business is strictly as somebody who buys stuff. There may be issues I haven't thought about. I'm probably also starting to go squirrely from being in lock down mode. Fortunately since I'm a programmer, I am one of the lucky ones that can work from home.

I also wonder about sales in the near term. In the past, I would typically buy Teensys from Adafruit (since I generally can order it on Wednesday and get it by Friday), and I can combine it with whatever new shiny Adafruit is offering. If I was getting other things, I might go to Digikey instead. Digikey seems to buy about 1/2 of their Teensys from Adafruit, and 1/2 from Sparkfun. And at times, of course I've ordered directly from PJRC.COM. Usually though I go with Adafruit or Digikey, because I'm often buying other things than just the Teensy. Also, with PJRC.COM in the left coast, it just takes longer to get to me without paying overnight mail prices.

With Adafruit currently switching to making critical medical electronics and masks/gowns, I suspect it might be some time before Digikey gets stock from them.

Sparkfun I don't know about. Their last Covid-19 update was in March. In theory they are still shipping (albeit maybe slower), but that could change in the future. In terms of cases per million, Colorado is currently 13th (Massachusetts where I live is #3 after New York and New Jersey), so if there is a surge, it might just be starting.

So my speculation is for the near term, those of us that want Teensy 4.1s, will need to go directly to PJRC.COM. Not a big deal for those of us in the USA. It may be a bigger deal for people outside of the USA, who buy from Adafruit/Sparkfun redistributors.
 
I wonder, whether down the road whether it would be worth it to sell Teensy 4.1's at an extra cost with the ram and/or flash chips soldered on to the board, much like you do with boards with pre-soldered pins.

Note, I'm talking about much later, when the stay at home restrictions are lifted. I don't want to cause more work now.

As I've mentioned before, one of the reasons I gravitated towards the Teensy during the first kickstarter, was I was pretty bad at soldering. I have gotten better over the years, and in fact I'm about to go and solder a flash chip on to my Teensy 4.1 I have to imagine there is a market for chips with larger flash memories (and psram as well), but I don't have a handle on how big the market is. It may be rather tiny, or perhaps it may open up new doors for Teensy 4.1 sales.

Of course it doesn't have to be something PJRC.COM does. I could imagine small shops buying the Teensys doing the soldering and selling the board with soldering at a markup. I would suspect also including the Audio Shield, since I do seem things every so often on people getting nervous about the small amount of through hole soldering for the audio shield. However, I really can't see a price point where it would allow the store to make any money that most people would be willing to buy.

Note below, take every thing I say with a grain of salt. My role in business is strictly as somebody who buys stuff. There may be issues I haven't thought about. I'm probably also starting to go squirrely from being in lock down mode. Fortunately since I'm a programmer, I am one of the lucky ones that can work from home.

I also wonder about sales in the near term. In the past, I would typically buy Teensys from Adafruit (since I generally can order it on Wednesday and get it by Friday), and I can combine it with whatever new shiny Adafruit is offering. If I was getting other things, I might go to Digikey instead. Digikey seems to buy about 1/2 of their Teensys from Adafruit, and 1/2 from Sparkfun. And at times, of course I've ordered directly from PJRC.COM. Usually though I go with Adafruit or Digikey, because I'm often buying other things than just the Teensy. Also, with PJRC.COM in the left coast, it just takes longer to get to me without paying overnight mail prices.

With Adafruit currently switching to making critical medical electronics and masks/gowns, I suspect it might be some time before Digikey gets stock from them.

Sparkfun I don't know about. Their last Covid-19 update was in March. In theory they are still shipping (albeit maybe slower), but that could change in the future. In terms of cases per million, Colorado is currently 13th (Massachusetts where I live is #3 after New York and New Jersey), so if there is a surge, it might just be starting.

So my speculation is for the near term, those of us that want Teensy 4.1s, will need to go directly to PJRC.COM. Not a big deal for those of us in the USA. It may be a bigger deal for people outside of the USA, who buy from Adafruit/Sparkfun redistributors.

Michael,

I am with you but for a different reason. I live in Washington State and we are not as severely compromised as you are. I think due to the situation with Covid-19 everything is going to take time and people know it. People are going to have get used to a new lifestyle for a while yet. I envy the fact that you are programmer and deal with this new hardware with ease. Before I got older and could not solder without shaking and raising all kids of havoc with PC boards I used to do point to point soldering on boards I designed. I programmed In assembly language on the old stuff like Z80's and such. That time has passed. In a nutshell I kind of rely on pre-assembled devices. So for me I will wait for the chance to buy devices that require no soldering. Which if I am right you are looking for to.

Hopefully I am not out of line or off topic here:)
 
Michael,

I am with you but for a different reason. I live in Washington State and we are not as severely compromised as you are. I think due to the situation with Covid-19 everything is going to take time and people know it. People are going to have get used to a new lifestyle for a while yet. I envy the fact that you are programmer and deal with this new hardware with ease. Before I got older and could not solder without shaking and raising all kids of havoc with PC boards I used to do point to point soldering on boards I designed. I programmed In assembly language on the old stuff like Z80's and such. That time has passed. In a nutshell I kind of rely on pre-assembled devices. So for me I will wait for the chance to buy devices that require no soldering. Which if I am right you are looking for to.

Hopefully I am not out of line or off topic here:)

Well it is more, I currently have passed the threshold and I can occasionally solder SOIC-8 chips now, and solder through hole pins is somewhat easier. But there are nights when I use more solder wick to clean up mistakes than solder. And I've had a few Teensies that I destroyed via soldering (mostly having some pads come off, so it could be used for other things, but some were wrecked).

But I do recall that before I got the skill, I was relying on pre-soldered boards/shields as well. And at times I do have trouble seeing the fine pins (63rd birthday was last week). I was mostly posting to plant a bug in Paul's ear about possible models for the 4.1 release.

And I do get distracted. I was planning to do it tonight, and I got caught having a long conversation in Facebook private messages with a friend, and didn't do the soldering.
 
Whether we offer a Teensy 4.1 with pre-installed memory chip will of course depend on demand, but how essential extra memory becomes is also a big factor. We already have 1 megabyte on chip. I suppose this is the moment for jokes about "640K will be enough for everyone".

Even 1 very compelling library or application that truly requires larger memory will probably be the deciding factor. Experience with this optional memory on Teensy 4.1 will probably also play a large factor in the design of the next Teensy with the RT1170 chip (which has 2MB on chip, though 512K is tightly coupled to the M7 core and 256K is tightly coupled to the M4 core, with the rest usable by either).

At this moment just getting Teensy 4.1 released is taking all our time & attention. So yeah, better to bring this up later, like a month after the product has been released. By then we'll probably have this thread closed, so talk of future stuff here will probably never be seen again. Best to bring it up in the suggestions area.

But I can tell you one of the many behind-the-scenes issues that came up with 4.1 was how we've communicated with the contract manufacturers. We've had some learning experiences about things which you'd think could be handled by email really must be done with in person meetings. Whether they could populate these chips on just a portion of a batch is exactly that sort of thing. Just yesterday Robin & I were talking about making time (perhaps early and having our 2 employees start an hour later) on certain days so we can both physically go there and meet. So yeah, we'll probably need to wait until this covid19 situation has improved. Hopefully it will recede in the summer.
 
Whether we offer a Teensy 4.1 with pre-installed memory chip will of course depend on demand, but how essential extra memory becomes is also a big factor. We already have 1 megabyte on chip. I suppose this is the moment for jokes about "640K will be enough for everyone".

Even 1 very compelling library or application that truly requires larger memory will probably be the deciding factor. Experience with this optional memory on Teensy 4.1 will probably also play a large factor in the design of the next Teensy with the RT1170 chip (which has 2MB on chip, though 512K is tightly coupled to the M7 core and 256K is tightly coupled to the M4 core, with the rest usable by either).

At this moment just getting Teensy 4.1 released is taking all our time & attention. So yeah, better to bring this up later, like a month after the product has been released. By then we'll probably have this thread closed, so talk of future stuff here will probably never be seen again. Best to bring it up in the suggestions area.

But I can tell you one of the many behind-the-scenes issues that came up with 4.1 was how we've communicated with the contract manufacturers. We've had some learning experiences about things which you'd think could be handled by email really must be done with in person meetings. Whether they could populate these chips on just a portion of a batch is exactly that sort of thing. Just yesterday Robin & I were talking about making time (perhaps early and having our 2 employees start an hour later) on certain days so we can both physically go there and meet. So yeah, we'll probably need to wait until this covid19 situation has improved. Hopefully it will recede in the summer.

Thanks for the update. Two possible big apps come to mind:
  • One is for a high end sound processing system where you need memory to hold the various sounds. There were threads in the last month about using the flash memory for holding multiple voices for processing;
  • Another is for self contained neopixel displays that might need more storage to hold the patterns, and more memory the keep the copy of the LEDs state in memory.

Now, I don't do such big things, but I'm wondering if it might be worthwhile to have a much larger audio shield, to handle at least quad outputs (or more, 4 parallel outputs for I2S, plus I2S2, dunno about S/PDIF). The trouble of a "Field of Dreams" approach (i.e. if you build it, they will come) is sometimes the customers will come, sometimes not. I do agree a big app is probably needed.
 
So far during the Beta of the 4.1, one case that I was able to make use of the larger memory was for a frame buffer for the ILI9488 display.
In SPI mode the display has 18 bit color which is sent over SPI as 24 bits per pixel. And since 3 bytes per pixel is not overly fun to play with nor you can not do DMA operations of 24 bits per transfer, I created the frame buffer to be 32 bits per pixel, so the DMA transfers 32 bits at a time to the SPI TDR register. The Spi transfer is setup to do 24 bit outputs from SPI...
So 320*480*4=614400 which does not fit in 512KB of either RAM1 or RAM2... But nicely fits in the external RAM. This version is nice as we don't have to do ISRs to convert the 16 bit data into 24 bits while the display updating.

Later could easily add in double buffering. Currently test sketch does get ISR on Frame complete and Half frame complete and I have the code updating the display in the half that I know won't be touched... But could simply setup two buffers and either have the code keep switching buffers, or could actually setup the DMA operations have both of them in the DMASettings chain and have the user code know when it switches from one logical screen to the other and have the user code then draw the other frame...

As for extra Flash. I am not sure. I wonder with 8MB of main flash, if we could somehow have the ability to reserve a portion of that area as a flash drive, in much the way that EEPROM emulation already reserves some of it.
 
So far during the Beta of the 4.1, one case that I was able to make use of the larger memory was for a frame buffer for the ILI9488 display.
In SPI mode the display has 18 bit color which is sent over SPI as 24 bits per pixel. And since 3 bytes per pixel is not overly fun to play with nor you can not do DMA operations of 24 bits per transfer, I created the frame buffer to be 32 bits per pixel, so the DMA transfers 32 bits at a time to the SPI TDR register. The Spi transfer is setup to do 24 bit outputs from SPI...
So 320*480*4=614400 which does not fit in 512KB of either RAM1 or RAM2... But nicely fits in the external RAM. This version is nice as we don't have to do ISRs to convert the 16 bit data into 24 bits while the display updating.

Later could easily add in double buffering. Currently test sketch does get ISR on Frame complete and Half frame complete and I have the code updating the display in the half that I know won't be touched... But could simply setup two buffers and either have the code keep switching buffers, or could actually setup the DMA operations have both of them in the DMASettings chain and have the user code know when it switches from one logical screen to the other and have the user code then draw the other frame...

As for extra Flash. I am not sure. I wonder with 8MB of main flash, if we could somehow have the ability to reserve a portion of that area as a flash drive, in much the way that EEPROM emulation already reserves some of it.

Along the same lines if doing 3d graphics with multiple objects will eventually need to implement a Z-buffer which could make use of the extra RAM. Also, with the potential of using the extra RAM for arrays using that special malloc case you mentioned.

I agree with @KurtE on the use of the extra FLASH to act like a flash drive. Was a little leery of SPIFFS but they grew on me as I was working with them.
 
Another benefit of extra RAM: video recording. With my OV7765 tests I would have liked 2x640KB buffers. Teensy 4.0 is plenty fast for that (3.6 was almost there).
 
Back
Top