• Join
  • Sign In with my.TI Login
Texas Instruments
  • Products
  • Applications
  • Tools & Software
  • Support & Community
  • Sample & Buy
  • About TI
Sample & Purchase Cart Sample & Purchase Cart
  • Search
  • Advanced
TI E2E™ Community
  • Support Forums
  • Blogs
  • Groups
  • Videos
  • 简体中文
  • More ...
TI Home » TI E2E Community » Support Forums » Low Power RF & Wireless Connectivity » SimpleLink™ Wi-Fi® » Bugreport CC3000HostDriver: SpiReadDataCont() calculates wrong data length
Share
Low Power RF & Wireless Connectivity
  • Forums
  • Announcements
  • Files
  • E2E Wiki
Options
  • Subscribe via RSS

Forums

Bugreport CC3000HostDriver: SpiReadDataCont() calculates wrong data length

This question is not answered
Johannes Overmann
Posted by Johannes Overmann
on Aug 13 2012 10:51 AM
Intellectual495 points

Hi,

line 499 in spi.c in function SpiReadDataCont() tries to make the data length to be read even, as all CC3000 data needs to be 16 bit aligned in length. However, the current implementation makes sure the data length is always odd (e.g. 100 gets fixed into 101 etc).

Line 499 should read:

if ((HEADERS_SIZE_EVNT + data_to_recv) & 1)

See also line 521 where this is correct.

Cheers,

Johannes

CC3000 bug
Report Abuse
  • Reply
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
All Replies
  • Pedro5084
    Posted by Pedro5084
    on Aug 16 2012 18:37 PM
    Intellectual2390 points

    Hi Johannes, 

    Which spi version are you using? I could not reference the line number you mentioned. Did you use the latest sensor app?

    Pedro 

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Johannes Overmann
    Posted by Johannes Overmann
    on Aug 17 2012 02:53 AM
    Intellectual495 points

    Hi Pedro,

    thanks for the response. I am using the latest Basic Wifi App spi.c (1.12.6.10) since the source of the Sensor app is only available as a Windows EXE and I do not use Windows. spi_version.h says version 6. I verified the line number in question:  499.

    This is the code I mean in spi.c: See ERROR below:

    long
    SpiReadDataCont(void)
    {
        long data_to_recv;
            unsigned char *evnt_buff, type;
    
            
        //
        //determine what type of packet we have
        //
        evnt_buff =  sSpiInformation.pRxPacket;
        data_to_recv = 0;
            STREAM_TO_UINT8((char *)(evnt_buff + SPI_HEADER_SIZE), HCI_PACKET_TYPE_OFFSET, type);
            
        switch(type)
        {
            case HCI_TYPE_DATA:
            {
                            //
                            // We need to read the rest of data..
                            //
                            STREAM_TO_UINT16((char *)(evnt_buff + SPI_HEADER_SIZE), HCI_DATA_LENGTH_OFFSET, data_to_recv);
                            if (!((HEADERS_SIZE_EVNT + data_to_recv) & 1)) // ERROR: remove negation
                            {       
                    data_to_recv++;
                            }
    
                            if (data_to_recv)
                            {
                    SpiReadDataSynchronous(evnt_buff + 10, data_to_recv);
                            }
                break;
            }
            case HCI_TYPE_EVNT:
            {
                            // 
                            // Calculate the rest length of the data
                            //
                STREAM_TO_UINT8((char *)(evnt_buff + SPI_HEADER_SIZE), HCI_EVENT_LENGTH_OFFSET, data_to_recv);
                            data_to_recv -= 1;
                            
                            // 
                            // Add padding byte if needed
                            //
                            if ((HEADERS_SIZE_EVNT + data_to_recv) & 1)
                            {
                                    
                        data_to_recv++;
                            }
                            
                            if (data_to_recv)
                            {
                    SpiReadDataSynchronous(evnt_buff + 10, data_to_recv);
                            }
    
                            sSpiInformation.ulSpiState = eSPI_STATE_READ_EOT;
                break;
            }
        }
            
        return (0);
    }
    
    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • jun zheng
    Posted by jun zheng
    on Mar 06 2013 01:21 AM
    Prodigy60 points

           I agree with the Johannes's finding, I also make confuse with this bug ,when odd length datas always are received lack of one , then cc300 stop responding the next API,so I fix as above description. datas received noraml.

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
TI E2E™ Community
  • Support Forums
  • Blogs
  • Videos
  • Groups
  • Site Support & Feedback
  • Settings
TI E2E™ Community Groups
  • TI University Program
  • Make the Switch
  • Microcontroller Projects
  • Motor Drive & Control
Other Communities
  • Deyisupport
  • Designsomething.org
  • beagleboard.org
  • TI on Element 14
  • TI on TechXchangeSM
Other Technical & Support Resources
  • WEBENCH® Design Center
  • Product Information Centers
  • Technical Documents
  • TI Design Network
  • TI Technical Articles
  • TI Training

All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with respect to these materials. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.

Content on this site may contain or be subject to specific guidelines or limitations on use. All postings and use of the content on this site are subject to the Terms of Use of the site; third parties using this content agree to abide by any limitations or guidelines and to comply with the Terms of Use of this site. TI, its suppliers and providers of content reserve the right to make corrections, deletions, modifications, enhancements, improvements and other changes to the content and materials, its products, programs and services at any time or to move or discontinue any content, products, programs, or services without notice.

Follow Us Texas Instruments on Facebook Texas Instruments on Twitter Texas Instruments on LinkedIn Texas Instruments on Google+
TI Worldwide | Contact Us | my.TI Login | Site Map | Corporate Citizenship | mobile m.ti.com (Mobile Version)

TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs and
embedded processors, along with software, tools and the industry’s largest sales/support staff.

© Copyright 1995-2013 Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy Policy | Terms of Use