Teensy 4.0 First Beta Test

Status
Not open for further replies.
Quick glance the link in #2470 looks like the one where those tabs violated overall width limit.

Since I still have also some them, I plan to cut-off the side-wings (not sure if there then fit) or use them for extension boards.
Nice thing with these model is that it is nearly ZIF (the amber part can be pulled to place in the ribbon and the pushed back to fasten.
 
(I think we are on page 100 now 8)
@KurtE

Ok heres the story. Got pins 26, 27, and 1 blinking no issue. But then I noticed that if I entered pin 0 not would print now blinking pin 0.... the LED keeps blinking. So my previous post was wrong on pin0. In that test I connected to pin0 first then entered 0. This test I changed the pin first then changed the connection.

The reason why I rechecked again was because I still couldn't get the display to work on SPI1.

EDIT:
@KurtE - tried using cs=10 but no luck.

Pin 0 - probably because stupid bug/assumption in test sketch: if (next_pin_number != 0) {

Obviously could be done differently... like maybe simply a bool saying we have a new number and use it...

I think there may be a care package from PJRC at our mailbox which I should pick up later today or tomorrow.

Might have to go back to town as have dead battery in tractor... Although lifting probably lifting big battery does not help hernia...
As for SPI1, I don't think with our ILI9488 driver we care about being a CS pin. So more or less any valid digital pin should be fine.
 
@Defragster:

I remember you did something with the RTC - the example TimeTeensy3 does not work for me - do you have any hints? I think there is some code missing?
 
@mjs513 - You might try changing in SPI.cpp

Code:
const SPIClass::SPI_Hardware_t  SPIClass::spiclass_lpspi3_hardware = {
	CCM_CCGR1, CCM_CCGR1_LPSPI3(CCM_CCGR_ON),
	DMAMUX_SOURCE_LPSPI3_TX, DMAMUX_SOURCE_LPSPI3_RX, _spi_dma_rxISR1,
	1, 
	7 | 0x10,
	26,
	7 | 0x10,
	27,
	7 | 0x10,
	0,
	7 | 0x10,
	IOMUXC_LPSPI3_SCK_SELECT_INPUT, IOMUXC_LPSPI3_SDI_SELECT_INPUT, IOMUXC_LPSPI3_SDO_SELECT_INPUT, IOMUXC_LPSPI3_PCS0_SELECT_INPUT,
	1, 1, 0, 0
};
to
Code:
const SPIClass::SPI_Hardware_t  SPIClass::spiclass_lpspi3_hardware = {
	CCM_CCGR1, CCM_CCGR1_LPSPI3(CCM_CCGR_ON),
	DMAMUX_SOURCE_LPSPI3_TX, DMAMUX_SOURCE_LPSPI3_RX, _spi_dma_rxISR1,
	1, 
	7 | 0x10,
	26,
	[COLOR="#FF0000"]2 | 0x10[/COLOR],
	27,
	7 | 0x10,
	0,
	7 | 0x10,
	IOMUXC_LPSPI3_SCK_SELECT_INPUT, IOMUXC_LPSPI3_SDI_SELECT_INPUT, IOMUXC_LPSPI3_SDO_SELECT_INPUT, IOMUXC_LPSPI3_PCS0_SELECT_INPUT,
	[COLOR="#FF0000"]1, 0, 1, 0[/COLOR]
};

If I am looking correct at pages 842-843 in new manual...
 
@Paul, looks like the RTC is connected to the SNVS - I can't download the security reference manual.
I think it's up to you to add the code for RTC.. otherwise I'd do it.
 
Frank - this should be what you need to start and get RTC secs ....

@Defragster:

I remember you did something with the RTC - the example TimeTeensy3 does not work for me - do you have any hints? I think there is some code missing?

I didn't get it converted to TIME's tmElements_t, Just using some code -
to watch it counting seconds. It does store time value that I put in the Secs_since_1970 and it worked to increment and maintain. I think that is the base of the TimeLib.h?

FrankB - BTW - Battery-backed-NV-RAM not as big as on the T_3.x's::
19.4.2.1 Using the General-Purpose Register
SNVS implements a 128-bit general-purpose register allows software to store a small
amount of data.
Is that the 128 bits here?: IMXRT_IOMUXC_SNVS_GPR (*(IMXRT_REGISTER32_t *)0x400A4000)
 
@mjs513 - You might try changing in SPI.cpp

….
to
Code:
const SPIClass::SPI_Hardware_t  SPIClass::spiclass_lpspi3_hardware = {
	CCM_CCGR1, CCM_CCGR1_LPSPI3(CCM_CCGR_ON),
	DMAMUX_SOURCE_LPSPI3_TX, DMAMUX_SOURCE_LPSPI3_RX, _spi_dma_rxISR1,
	1, 
	7 | 0x10,
	26,
	[COLOR="#FF0000"]2 | 0x10[/COLOR],
	27,
	7 | 0x10,
	0,
	7 | 0x10,
	IOMUXC_LPSPI3_SCK_SELECT_INPUT, IOMUXC_LPSPI3_SDI_SELECT_INPUT, IOMUXC_LPSPI3_SDO_SELECT_INPUT, IOMUXC_LPSPI3_PCS0_SELECT_INPUT,
	[COLOR="#FF0000"]1, 0, 1, 0[/COLOR]
};

If I am looking correct at pages 842-843 in new manual...

@KurtE
Made the change but no luck. The sketch gets up to reading the control registers and stops.
Code:
ILI9488_t3n: (T4) SPI1 automatically selected

MOSI:26 MISO:1 SCK:27
 
Teensy 4 beta2 (1062) testing observations:
  • stencil on MCU: MIMXRT1062 DVL6A 0N00X CTAA1848H
  • blink power consumption (including green power LED) LED off/on 105/108 ma
  • crystal drift with GPT and GPS pps: 24mhz 1 ppm, RTC (32768 hz) -6 ppm
  • chip temp @600mhz 37.5 C
  • MAC address 04E9E508D7A3
  • 10 GPIO toggles 119 cycles, with fast GPIO 18 cycles
  • coremark (Fastest @600mhz) 2427.4 iterations/sec
  • audio adapter SPI (T4 pins 10-13) uSD listfiles worked with SanDisk (failed with Kingston microSD)
  • BUILTIN_SDCARD listfiles works for both SanDisk and Kingston microSD
  • RTC tests fail, no definition for __rtc_localtime (RTC is running). FIX: boards.txt post #668
  • edge pin tests: PWM, INPUT_PULLUP, analog, attachInterrupt, and loopback tests on Serial1-5 (no pogo pins for Serial 6 and 7)
  • working: TRNG, CRC32, SHA256, AES
Most tests with 1.8.8 1.46-beta11
 
Last edited:
@mjs513 looks like it is time for me to try to debug some of this.

Probably won't go back into town today...

I debugged SPI2, using an SPI test app I had earlier which I should simplify...
Code:
#include <SPI.h>
#include <EventResponder.h>
#define SPIT SPI2
#define DBGSerial Serial
#define CS_PIN 36

#define SMALL_TRANSFER_SIZE 128
#define BUFFER_SIZE 0x12000l   // More than 64K
//uint8_t buffer[BUFFER_SIZE];
uint8_t *buffer;  // lets malloc it...
//uint8_t rxBuffer[SMALL_TRANSFER_SIZE];
DMAMEM uint8_t rxBuffer[BUFFER_SIZE];
//uint8_t *rxBuffer;
uint8_t *foo_bar = nullptr;
uint8_t static_buffer[16];


EventResponder event;
volatile bool event_happened = false;
void asyncEventResponder(EventResponderRef event_responder)
{
  digitalWriteFast(CS_PIN, HIGH);
  event_happened = true;
}

void setup() {
  // debug pins
  uint8_t stack_buffer[10];
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  digitalWrite(0, LOW);
  digitalWrite(1, LOW);
  extern unsigned long _heap_start;
  extern unsigned long _heap_end;

  pinMode(CS_PIN, OUTPUT);
  digitalWriteFast(CS_PIN, HIGH);
  while (!Serial && millis() < 4000) ;  // wait for Serial port
  DBGSerial.begin(115200);
  delay(500);
  DBGSerial.println("SPI Test program");
  SPIT.begin();

  buffer = (uint8_t *)malloc(BUFFER_SIZE);
  //rxBuffer = (uint8_t *)malloc(BUFFER_SIZE);


  DBGSerial.print("Buffer: ");
  DBGSerial.print((uint32_t)buffer, HEX);
  DBGSerial.print(" RX Buffer: ");
  DBGSerial.print((uint32_t)rxBuffer, HEX);
  DBGSerial.print(" ");
  DBGSerial.println(BUFFER_SIZE, DEC);
  DBGSerial.printf("Static buffer: %x, Stack Buffer: %x\n", (uint32_t)static_buffer, (uint32_t)stack_buffer);
  DBGSerial.printf("Heap Start: %x, Heap End: %x\n", (uint32_t)&_heap_start, (uint32_t)&_heap_end);
  event.attachImmediate(&asyncEventResponder);
}
int nn = 0;
void loop() {
//  while (DBGSerial.read() != -1) ; // Make sure queue is empty.
//  DBGSerial.println("Press any key to run test");
  //while (!DBGSerial.available()) ; // will loop until it receives something
//  while (DBGSerial.read() != -1) ; // loop until queue is empty
  DBGSerial.println("Ready to start tests");


  SPIT.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
  DBGSerial.println("After Begin Transaction");

  //=================================================================
  // Transfer Sync
  //=================================================================


  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i & 0xff;
  for (uint32_t i = 0; i < BUFFER_SIZE; i++)  rxBuffer[i] = 0x5a;
  DBGSerial.println("Transfer Small"); //DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(buffer, rxBuffer, SMALL_TRANSFER_SIZE);
  digitalWriteFast(CS_PIN, HIGH);
  DBGSerial.println("*** Completed ***"); DBGSerial.flush();
  dumpBuffer(buffer, SMALL_TRANSFER_SIZE);
  DBGSerial.println();
  dumpBuffer(rxBuffer, SMALL_TRANSFER_SIZE);
  validateTXBuffer(0);
  delay(5);

  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i & 0xff;
  DBGSerial.println("write Small"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(buffer, NULL, SMALL_TRANSFER_SIZE);
  digitalWriteFast(CS_PIN, HIGH);
  DBGSerial.println("*** Completed ***"); DBGSerial.flush();
  validateTXBuffer(0);
  delay(5);

  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i & 0xff;
  DBGSerial.println("read Small"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(NULL, rxBuffer, SMALL_TRANSFER_SIZE);
  digitalWriteFast(CS_PIN, HIGH);
  DBGSerial.println("*** Completed ***"); DBGSerial.flush();
  dumpBuffer(rxBuffer, SMALL_TRANSFER_SIZE);
  delay(5);

  SPIT.beginTransaction(SPISettings(2000000, MSBFIRST, SPI_MODE0));
  for (uint32_t i = 0; i < BUFFER_SIZE; i++)buffer[i] = i / 1024;
  for (uint32_t i = 0; i < BUFFER_SIZE; i++)  rxBuffer[i] = 0x5a;

  DBGSerial.println("Transfer Full"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(buffer, rxBuffer, BUFFER_SIZE);
  digitalWriteFast(CS_PIN, HIGH);
  validateTXBuffer(1);
  delay(5);

  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i / 1024;
  DBGSerial.println("write full"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(buffer, NULL, BUFFER_SIZE);
  digitalWriteFast(CS_PIN, HIGH);
  validateTXBuffer(1);
  delay(5);

  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i & 0xff;
  DBGSerial.println("read full"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(NULL, buffer, BUFFER_SIZE);
  digitalWriteFast(CS_PIN, HIGH);
  delay(5);
  //=================================================================
  // Transfer Async
  //=================================================================
  for (uint32_t i = 0; i < 5; i++) {
    digitalWriteFast(CS_PIN, LOW);
    delay(1);
    digitalWriteFast(CS_PIN, HIGH);
    delay(1);
  }
  event_happened = false;
  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i & 0xff;
  DBGSerial.println("Async write Small"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(buffer, NULL, SMALL_TRANSFER_SIZE, event);
  DBGSerial.println("After write call, waiting for event");
  while (!event_happened) ;
  event_happened = false;
  validateTXBuffer(0);
  delay(5);

  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i & 0xff;
  for (uint32_t i = 0; i < BUFFER_SIZE; i++)  rxBuffer[i] = 0x5a;
  DBGSerial.println("Async Transfer Small"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(buffer, rxBuffer, SMALL_TRANSFER_SIZE, event);
  DBGSerial.println("After Transfer call, waiting for event");
  while (!event_happened) ;
  event_happened = false;
  dumpBuffer(buffer, SMALL_TRANSFER_SIZE);
  DBGSerial.println();
  dumpBuffer(rxBuffer, SMALL_TRANSFER_SIZE);
  validateTXBuffer(0);
  delay(5);


  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i & 0xff;
  for (uint32_t i = 0; i < BUFFER_SIZE; i++)  rxBuffer[i] = 0x5a;
  DBGSerial.println("Async read Small"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.setTransferWriteFill(0x42);
  SPIT.transfer(NULL, rxBuffer, SMALL_TRANSFER_SIZE, event);
  //arm_dcache_delete(rxBuffer, SMALL_TRANSFER_SIZE);
  while (!event_happened) ;
  event_happened = false;
  dumpBuffer(rxBuffer, SMALL_TRANSFER_SIZE);
  validateTXBuffer(0);
  delay(5);

  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i / 1024;
  for (uint32_t i = 0; i < BUFFER_SIZE; i++)  rxBuffer[i] = 0x5a;
  DBGSerial.println("Async Transfer Full"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(buffer, rxBuffer, BUFFER_SIZE, event);
  while (!event_happened) ;
  event_happened = false;
  dumpBuffer(rxBuffer, 512);
  validateTXBuffer(1);
  delay(5);

  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i / 1024;
  DBGSerial.println("Async write full"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(buffer, NULL, BUFFER_SIZE, event);
  while (!event_happened) ;
  event_happened = false;
  validateTXBuffer(1);
  delay(5);

  for (uint32_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = i & 0xff;
  for (uint32_t i = 0; i < BUFFER_SIZE; i++)  rxBuffer[i] = 0x5a;
  DBGSerial.println("Async read full"); DBGSerial.flush();
  digitalWriteFast(CS_PIN, LOW);
  SPIT.transfer(NULL, rxBuffer, BUFFER_SIZE, event);
  while (!event_happened) ;
  event_happened = false;
  dumpBuffer(rxBuffer, 512);
  validateTXBuffer(0);
  delay(5);


  DBGSerial.println("Tests completed");
  SPIT.endTransaction();
}

void dumpBuffer(uint8_t *pb, int cb) {
  uint8_t i = 0;
  while (cb) {
    DBGSerial.print(*pb++, HEX);
    cb--;
    DBGSerial.print(" ");
    i++;
    if (i == 16) {
      DBGSerial.println();
      i = 0;
    }
  }
  DBGSerial.println();
}
void validateTXBuffer(uint8_t test)
{
  uint8_t error_count = 0;
  for (int i = 0; i < BUFFER_SIZE; i++) {
    if (((test == 0) && (buffer[i] != (i & 0xff)))
        || ((test == 1) && (buffer[i] != (i / 1024)))) {
      DBGSerial.print("Tx Buffer validate failed Index: ");
      DBGSerial.print(i, DEC);
      DBGSerial.print(" Value: ");
      DBGSerial.println(buffer[i], HEX);
      error_count++;
      DBGSerial.print("Tx Buffer validate failed Index: ");
      DBGSerial.print(i, DEC);
      if (error_count == 10)
        break;
    }
  }
}
Which appears to be hanging on the start of small buffer... So will try to debug...
 
@KurtE
Ok. Made one more change to pins in your spi class:
Code:
const SPIClass::SPI_Hardware_t  SPIClass::spiclass_lpspi3_hardware = {
	CCM_CCGR1, CCM_CCGR1_LPSPI3(CCM_CCGR_ON),
	DMAMUX_SOURCE_LPSPI3_TX, DMAMUX_SOURCE_LPSPI3_RX, _spi_dma_rxISR1,
	1, 
	7 | 0x10,
	26,
	2 | 0x10,
	27,
	[COLOR="#FF0000"]2 | 0x10,[/COLOR]
	0,
	7 | 0x10,
	IOMUXC_LPSPI3_SCK_SELECT_INPUT, IOMUXC_LPSPI3_SDI_SELECT_INPUT, IOMUXC_LPSPI3_SDO_SELECT_INPUT, IOMUXC_LPSPI3_PCS0_SELECT_INPUT,
	1, 0, 1, 0
};
Now I get on the sermon:
Code:
ILI9488_t3n: (T4) SPI1 automatically selected

MOSI:26 MISO:1 SCK:27

ILI9488 Test!
Display Power Mode: 0x0
MADCTL Mode: 0x0
Pixel Format: 0x0
Image Format: 0x0
Self Diagnostic: 0x0
Benchmark                Time (microseconds)
Screen fill              734227
Text                     14712
Lines                    189020
Horiz/Vert Lines         62006
Rectangles (outline)     34462
Rectangles (filled)      1774692
Circles (filled)         220661
Circles (outline)        152997
Triangles (outline)      40923
Triangles (filled)       559241
Rounded rects (outline)  67348
Rounded rects (filled)   1947741
Done!
So now let me go and check my connections to the display again. Always a problem.

EDIT: Rechecked the wiring - had to switch a few but still no display. Ok more digging I guess.

EDIT:2 - double checked SPI and that still works - just don't see why SPI1 is not working.
 
Last edited:
@KurtE

Looks like SPI1 works with the ILI9488 library. You have to use CS0 on pin 0 to make it work - doesn't work with CS=10. Also you need the changes to SPI library for spiclass_lpspi3_hardware in post #2490.
 
@mjs513 What does your table look like now?

I think I was getting some luck with:
Code:
const SPIClass::SPI_Hardware_t  SPIClass::spiclass_lpspi3_hardware = {
	CCM_CCGR1, CCM_CCGR1_LPSPI3(CCM_CCGR_ON),
	DMAMUX_SOURCE_LPSPI3_TX, DMAMUX_SOURCE_LPSPI3_RX, _spi_dma_rxISR1,
	1, 
	7 | 0x10,
	26,
	2 | 0x10,
	27,
	2 | 0x10,
	0,
	7 | 0x10,
	IOMUXC_LPSPI3_SCK_SELECT_INPUT, IOMUXC_LPSPI3_SDI_SELECT_INPUT, IOMUXC_LPSPI3_SDO_SELECT_INPUT, IOMUXC_LPSPI3_PCS0_SELECT_INPUT,
	1, 0, 0, 0
};
Some reason when I tried 1, 0, 1, 0, I was not getting output, but maybe my trying to press probes at the bottom of the chip to touch those pins... I was not making good contact.

Assuming you are getting good results you may want to do a PR to SPI library. And thanks
 
@KurtE

This is what I am using now
Code:
const SPIClass::SPI_Hardware_t  SPIClass::spiclass_lpspi3_hardware = {
	CCM_CCGR1, CCM_CCGR1_LPSPI3(CCM_CCGR_ON),
	DMAMUX_SOURCE_LPSPI3_TX, DMAMUX_SOURCE_LPSPI3_RX, _spi_dma_rxISR1,
	1, 
	7 | 0x10,
	26,
	2 | 0x10,
	27,
	2 | 0x10,
	0,
	7 | 0x10,
	IOMUXC_LPSPI3_SCK_SELECT_INPUT, IOMUXC_LPSPI3_SDI_SELECT_INPUT, IOMUXC_LPSPI3_SDO_SELECT_INPUT, IOMUXC_LPSPI3_PCS0_SELECT_INPUT,
	1, 0, 1, 0
};
Like you said it was based on pages 842 on for LSPI3 pins
 
FrankB - I wanted to say manitou started the RTC work - but the sketch I found was WMXZ - for wake alarm - but Manitou was about 200 posts earlier with RTC ... RTC ticking ... Here is a simple sketch to start up the RTC

Teensy 4 beta2 (1062) testing observations:
  • stencil on MCU: MIMXRT1062 DVL6A 0N00X CTAA1848H
  • blink power consumption (including green power LED) off/on 105/108 ma
  • crystal drift with GPT and GPS: 24mhz 1 ppm, RTC -6 ppm
  • chip temp @600mhz 37.5 C
  • MAC address 04E9E508D7A3
  • 10 GPIO toggles 119 cycles, with fast GPIO 18 cycles
  • coremark (Fastest @600mhz) 2427.4 iterations/sec
  • audio adapter SPI uSD listfiles worked with SanDisk (failed with Kingston microSD)
  • BUILTIN_SDCARD listfiles works for both SanDisk and Kingston microSD
    [*] RTC tests fail, no definition for __rtc_localtime (RTC is running). FIX: boards.txt post #668

That is good news on faster and working GPIO toggles - ~2 cpu cycles when there are 600,000,000 per second is … quick :)

What is power consumed when 'Off' - with RTC still ticking - Paul said that will be reduced in coming weeks when boot MCU goes offline.

Your 37.5°C temp agrees with what I was seeing when idle.

Very nice the SDIO BUILTIN_SDCARD is (better) able to see both cards. Funny my two here are Kinston and Sandisk - I can 'listfiles' on both.
 
ILI9341_t3

@KurtE
Tried your modified library with T4 on SPI1 it will not work on anything other than SPI. Looks like we will have to do the same thing we did for the ILI9488_t3 lib to get it working on other SPI ports. That may take a little more work - guess that is a new project :)

@Paul - know you have a ton of stuff on your list of things to do but do you think you can pull in Kurt's PR into the ILI9341 lib at some point so we have a baseline lib for the T4?
 
@KurtE
Assuming you are getting good results you may want to do a PR to SPI library. And thanks
Sorry I just saw this - no problem doing the PR but should I do it to your fork or the Paul's master - get confused sometimes :)
 
@KurtE
Sorry I just saw this - no problem doing the PR but should I do it to your fork or the Paul's master - get confused sometimes :)
Me too :D - As Paul pulled our stuff in to the master branch (and beta build), the PR should be against his master branch...
 
@KurtE / @mjs513 - let me know where the latest usable 9488 / 9341 / USBHost are and perhaps that can be next.

Other than the odd problem with Serial1 getting power from debug Teensy Tx ("The UART data transmission line is normally held at a high voltage level when it’s not transmitting data" - making the BB Green LED glow) and stopping it from booting [as it seemed the T4-1 did similarly 1+K posts back and first page issue] - everything looks happy good.

@KurtE - did you give the quick test suggested on your USB<>UART device that was causing your T4-2 to not startup? See the Glow when Off with common GND?

IIRC there is some rule about having power applied pins of an unpowered device? But something like this seems a common thing?

<edit>: When discovered on the T4-1 as noted in post #6: 'teensy_ports issues with 3+ boards, #1330, #1398 #2391 t4b2 one board LED Glows,'
That was with two added debug Teensy's - this happens with just 1 - perhaps the 1052 had better handling of this - I did test with a single Tx on Rx and T4-1 did not repro like on T4-2.
… as noted here #2391: No Start T4 with Serial Teensys on UARTUSB
 
Last edited:
received the 1062-beta board -- thanks!

no boot-up issues when using external power! (see #1995)

quick question about "Drive Strength":

i've been playing around a bit with a SPI DAC breakout-board this morning and having difficulties getting it to run reliably. the SPI signals in that case have been giving me a bit of a headache before, so i'm not entirely surprised, but the DAC will run glitch-free for days using T3.2 @ 30MHz SPI SCK (in this case, the trick was to disable the DSE bit, ie CORE_PIN13_CONFIG = PORT_PCR_MUX(2)), so i figured it should at least run at modest speeds using T4.0 ... (not so, unfortunately, even at 1MHz the DAC will eventually trip up).

am i right in assuming that IOMUXC_PAD_DSE(1) would be the nearest equivalent as regards 1052/1062? (it does give slightly better results than IOMUXC_PAD_DSE(3)) (IOMUXC_PAD_DSE(0) = 000 / "DSE_0_output_driver_disabled" stops everything entirely), or is there anything else i can do/try to vamp up the signals? (ie save hardware modifications .. ))
 
Status
Not open for further replies.
Back
Top