<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Kinetis Microcontrollers中的主题 Re: High Baud Rate UART (6Mbaud) - K66F</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607759#M35855</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Try putting a scope on the TxD/RxD line&amp;nbsp;and see what your data looks like (at both ends of your cable). &amp;nbsp;At high baud rates, you're going to need low capacitance in the&amp;nbsp;wiring between host and terminal, and strong pullups to ensure you get clean square pulses.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 07 Oct 2016 01:12:52 GMT</pubDate>
    <dc:creator>geoff_s</dc:creator>
    <dc:date>2016-10-07T01:12:52Z</dc:date>
    <item>
      <title>High Baud Rate UART (6Mbaud) - K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607757#M35853</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, I just received my first NXP development board (FRDM-K66F). &amp;nbsp;I am trying to create a CDC device (ACM), and I am trying to get the UART communication working at a rate of 6Mbaud.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From what I can see from the documentation, my baud rate maximum will be &amp;nbsp;baud = clock / 16. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using UART0, and I *think* I have correctly linked it to the system clock. &amp;nbsp;The documentation indicates that the system clock is running at 120Mhz, and stepping through the code confirms this value as I pass it to the UART_Init. &amp;nbsp;Based on this information and the baud calculation above, I should have no problems communicating at 7.5Mbaud.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I used the dev_cdc_vcom_freertos_frdmk66f example as a baseline. &amp;nbsp;This example creates the CDC device that I need, but it is set up as a loopback, so I needed to integrate pieces from the freertos_uart_frdmk66f for setting up my UART0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The uart example is pretty basic, so I used the K66F Reference guide to try to set up the UART correctly (this may be my problem). &amp;nbsp;The original cdc_vcom code had the debug output also using UART0, so I have redirected that debug output to UART1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The best data rate I can achieve is 1Mbaud. &amp;nbsp;If I try to go faster than that, I get garbage characters in my terminal. &amp;nbsp;I have confirmed that my terminal can handle the high 6Mbaud rates with my host device, so I do not have reason to believe that my terminal is the problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My code is still pretty basic, so I thought maybe someone would spot what I have done wrong. &amp;nbsp;Again, the base source is from the&amp;nbsp;&lt;SPAN&gt;dev_cdc_vcom_freertos_frdmk66f example, so I will just post the portion that I have modified.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;PRE&gt;// -----------------
// In virtual_com.h
// -----------------
#define LINE_CODING_DTERATE (6000000)

&lt;PRE&gt;// -----------------
// In virtual_com.c
// -----------------&lt;/PRE&gt;#define UART_BASE UART0
#define UART_RX_TX_IRQn UART0_RX_TX_IRQn

/* UART configuration */
struct rtos_uart_config uart_config = {
 .baudrate = LINE_CODING_DTERATE,
 .parity = kUART_ParityDisabled,
 .stopbits = kUART_OneStopBit,
 .buffer = s_uartBackgroundBuffer,
 .buffer_size = sizeof(s_uartBackgroundBuffer),
};

.
.
.&lt;/PRE&gt;&lt;PRE&gt;void CdcTask(void *handle)
{
&amp;nbsp;&amp;nbsp; int error = kStatus_Fail;
&amp;nbsp;&amp;nbsp; USB_DeviceApplicationInit();

&amp;nbsp;&amp;nbsp; while (1)
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((1 == s_cdcVcom.attach) &amp;amp;&amp;amp; (1 == s_cdcVcom.startTransactions))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (s_cdcRecvSize &amp;gt; 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error = UART_RTOS_Send(&amp;amp;s_uartHandle, s_cdcRecvBuf, s_cdcRecvSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (error != kStatus_Success)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Failure to send Data Handling code here */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINTF("UART Send Error");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_cdcRecvSize = 0;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Re-arm the receive handler.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_DeviceCdcAcmRecv(s_cdcVcom.cdcAcmHandle, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_CDC_VCOM_BULK_OUT_ENDPOINT, 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_cdcRecvBuf,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_UsbDeviceCdcVcomDicEndpoints[0].maxPacketSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; }
}

void UartTask(void *pvParameters)
{
&amp;nbsp;&amp;nbsp; uint8_t uartRxByte = 0;
&amp;nbsp;&amp;nbsp; size_t rxCount;

&amp;nbsp;&amp;nbsp; usb_status_t error = kStatus_USB_Error;

&amp;nbsp;&amp;nbsp; uart_config.srcclk = CLOCK_GetFreq(kCLOCK_CoreSysClk);
&amp;nbsp;&amp;nbsp; uart_config.base = UART_BASE;

&amp;nbsp;&amp;nbsp; if (0 &amp;gt; UART_RTOS_Init(&amp;amp;s_uartHandle, &amp;amp;t_uartHandle, &amp;amp;uart_config))
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINTF("Error during UART initialization.\r\n");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vTaskSuspend(NULL);
&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp; while(1)
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UART_RTOS_Receive(&amp;amp;s_uartHandle, &amp;amp;uartRxByte, sizeof(uartRxByte), &amp;amp;rxCount);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (rxCount &amp;gt; 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error = USB_DeviceCdcAcmSend(s_cdcVcom.cdcAcmHandle,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_CDC_VCOM_BULK_IN_ENDPOINT, &amp;amp;uartRxByte, sizeof(uartRxByte));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (error != kStatus_USB_Success)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Failure to send Data Handling code here
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINTF("CDC Send Error");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rxCount = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; }
}

int main(void)
{
&amp;nbsp;&amp;nbsp; BOARD_InitPins();
&amp;nbsp;&amp;nbsp; BOARD_BootClockRUN();
&amp;nbsp;&amp;nbsp; BOARD_InitDebugConsole();
&amp;nbsp;&amp;nbsp; NVIC_SetPriority(UART_RX_TX_IRQn, 5);

&amp;nbsp;&amp;nbsp; if (xTaskCreate(CdcTask,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // pointer to the task
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_cdcTaskName,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // task name for kernel awareness debugging
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000L / sizeof(portSTACK_TYPE),&amp;nbsp; // task stack size
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;s_cdcVcom,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // optional task startup argument
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // initial priority
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;s_cdcVcom.applicationTaskHandle // optional task handle to create
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) != pdPASS)
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usb_echo("CDC task create failed!\r\n");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;
&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp; if (xTaskCreate(UartTask,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // pointer to the task
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_uartTaskName,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // task name for kernel awareness debugging
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000L / sizeof(portSTACK_TYPE), // task stack size
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // optional task startup argument
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // initial priority
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // optional task handle to create
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) != pdPASS)
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usb_echo("UART task create failed!\r\n");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -11;
&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp; vTaskStartScheduler();

&amp;nbsp;&amp;nbsp; return 1;
}&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A few more things to note... as I step through the UART_RTOS_Init (which leads to the UART_Init), I can see that the&amp;nbsp;srcClock_Hz gets set to 120000000, I see that the sbr gets set to 1, the config-&amp;gt;baudRate_Bps comes in as my defined 6000000, and the brfa is calculated as 8. &amp;nbsp;Based on the calculation that I found in the reference manual in section&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;PRE&gt;59.5.3 Baud Rate Generation

UART baud rate = UART module clock / (16 × (SBR[12:0] + BRFD))&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;... plugging in the above values would give me the 6000000 that I want. &amp;nbsp;It just doesn't seem to communicate correctly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Does anyone see something that I missed? &amp;nbsp;Thanks for your help!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Oct 2016 19:10:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607757#M35853</guid>
      <dc:creator>ekpx23129</dc:creator>
      <dc:date>2016-10-05T19:10:42Z</dc:date>
    </item>
    <item>
      <title>Re: High Baud Rate UART (6Mbaud) - K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607758#M35854</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't see any problems with 6.0M or 7.5M Baud rates.&lt;/P&gt;&lt;P&gt;Thsi is the uTasker simulator showing the achieved baud rates when UART0 (clocked from system clock) and UART2 (clocked form Bus clock) are defined for these speeds:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_2.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/1939i4A2710AE63DF2026/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_2.png" alt="pastedImage_2.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;As reference, the register values are:&lt;/P&gt;&lt;P&gt;UART2 (bus clock = 60000000Hz) Divide =0 ; fraction = 0x14 -&amp;gt; 6.0MBaud&lt;/P&gt;&lt;P&gt;UART0 (system clock = 180000000Hz) Divide =1 ; fraction = 0x10 -&amp;gt; 7.5MBaud&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Oct 2016 00:29:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607758#M35854</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2016-10-06T00:29:06Z</dc:date>
    </item>
    <item>
      <title>Re: High Baud Rate UART (6Mbaud) - K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607759#M35855</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Try putting a scope on the TxD/RxD line&amp;nbsp;and see what your data looks like (at both ends of your cable). &amp;nbsp;At high baud rates, you're going to need low capacitance in the&amp;nbsp;wiring between host and terminal, and strong pullups to ensure you get clean square pulses.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 07 Oct 2016 01:12:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607759#M35855</guid>
      <dc:creator>geoff_s</dc:creator>
      <dc:date>2016-10-07T01:12:52Z</dc:date>
    </item>
    <item>
      <title>Re: High Baud Rate UART (6Mbaud) - K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607760#M35856</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I wasn't sure how to scope the line since I am using the USB-B cable via the OpenSDA for UART0 (PortB 16 and 17). &amp;nbsp;However, the same USB cable works with a "competitor's" eval board at 6Mbaud, so I don't believe the cable is the problem. &amp;nbsp;I am trying to use the NXP K66F rather than the competitor board because the NXP has the security module.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Further investigation: I switched to UART3. &amp;nbsp;This doesn't give me the 6Mbaud that I needed, since the UART3 runs from the bus clock. &amp;nbsp;But UART3 gives me easy access to Tx/Rx via J2 and also allows me to bypass the OpenSDA. &amp;nbsp;In doing so, I can communicate at 3Mbaud on the UART3 using PortB 10 and 11 (from the J2 block). &amp;nbsp;This is faster than anything I can achieve on UART0 via OpenSDA. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is there some issue with OpenSDA that others have reported? &amp;nbsp;Or is there some additional setting I need to apply to the OpenSDA? &amp;nbsp;It shows up on my PC as "Full Speed USB", so it should handle the 6Mbaud with no problems, but fails at anything over 1Mbaud.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For now I will settle with UART3 @ 3Mbaud.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 11 Oct 2016 19:22:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607760#M35856</guid>
      <dc:creator>ekpx23129</dc:creator>
      <dc:date>2016-10-11T19:22:42Z</dc:date>
    </item>
    <item>
      <title>Re: High Baud Rate UART (6Mbaud) - K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607761#M35857</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Eric&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The OpenSDA on the K66 board is a 50MHz K20 operating as USB-CDC to RS232 converter. Assuming that it is running at 48MHz system clock it should be able to accurately achieve 3MBaud (48MHz / 16 / 1) but it is also possible that its USB-CDC implementation doesn't support all Baud rates, or higher bauds can't be achieved accurately enough.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you set the VCOM to 3MBaud you can send something to it so that it is converted to UART output on UART1_TX_TGTMCU_R, where you can measure its accuracy and work out which Baud rates the OpenSDA version can achieve, those that it can't do accurately, or where a limit might have been set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You could also de-solder the jumpers R24 and R38 and then physically connect the UART at these points in case the OpenSDA is limiting development.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you don't absolutely need UART for the communication you could also use USB-CDC directly in the K66 to transfer the data, thus avoiding any UART in the chain.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 11 Oct 2016 20:36:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607761#M35857</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2016-10-11T20:36:37Z</dc:date>
    </item>
    <item>
      <title>Re: High Baud Rate UART (6Mbaud) - K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607762#M35858</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, Thanks for the reply. &amp;nbsp;Using your&amp;nbsp;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;UART1_TX_TGTMCU_R idea, I was only able to get legible output from my OpenSDA at 1Mbaud. &amp;nbsp;I returned to working on UART3 and PortB:10 / PortB:11, but then I ran into an issue that I kept overrunning the PFIFO. &amp;nbsp;The UART0 has a larger PFIFO buffer which would be good, but the UART3 only has 1 char and is easily overflowed at high-speeds or large datablocks.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;I think I will work on a solution making use of your other idea of avoiding the UART and using a full-CDC approach. &amp;nbsp;I do appreciate your advice. &amp;nbsp;Thank you.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 13 Oct 2016 21:58:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607762#M35858</guid>
      <dc:creator>ekpx23129</dc:creator>
      <dc:date>2016-10-13T21:58:26Z</dc:date>
    </item>
    <item>
      <title>Re: High Baud Rate UART (6Mbaud) - K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607763#M35859</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Eric,&lt;/P&gt;&lt;P&gt;"&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;I have confirmed that my terminal can handle the high 6Mbaud rates with my host device" &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;Which host device are you using?&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 04 Aug 2017 15:38:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607763#M35859</guid>
      <dc:creator>axb</dc:creator>
      <dc:date>2017-08-04T15:38:14Z</dc:date>
    </item>
    <item>
      <title>Re: High Baud Rate UART (6Mbaud) - K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607764#M35860</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I mean terminal software&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 07 Aug 2017 06:10:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/High-Baud-Rate-UART-6Mbaud-K66F/m-p/607764#M35860</guid>
      <dc:creator>axb</dc:creator>
      <dc:date>2017-08-07T06:10:27Z</dc:date>
    </item>
  </channel>
</rss>

