AnsweredAssumed Answered

CM3WSD timeout with custom bootloader

Question asked by lexstarwind on Aug 2, 2013
Latest reply on Aug 7, 2013 by PatrickN

I'm working on a bootloader/application programmer for a custom of mine. The basic idea is to create something similar to the on chip programmer because from their product they won't have access to the boot mode pin (P2.2). In my custom bootloader we've decided to replace the P2.2 pin check with a serial backspace character on start up. Basically if the backspace character is received on the serial port within a certain time period, the bootloader will accept a download of a new application. If not, it simply launches the user application. Pretty simple I think.  I've implemented handling for the erase and write command of the AN1160 protocol. Using the ADUCM360MKZ development kit I have been able to successfully program 2 separate applications as a proof of concept. The test application is a simple hello world app that jumps to the custom bootloader before it launches. The basic sequence of events is as follows. I program the board using keil uVision with the standalone bootloader. Use the CM3WSD application to program HelloWorld 1. Hello World 1 contains the custom bootloader. Then I use the CM3WSD application to program Hello World 2. Everything seems to work fine.I can use the CM3WSD application with my custom bootloader to keep reprogramming the board with both applications. Progam Hello World 1. Restart. Program Hello World 2. Restart, so on and so forth. However when I switch to the customers custom hardware which uses the same micro as the development kit my bootloader seems to fail. When I program their board with the standalone bootloader, I am able to program Hello World 1. However when I try to use Hello World 1 to program Hello World 2, the CM3WSD application times out before the erase command or write commands complete. Sometimes it fails on erase, sometimes it fails on the write. Is there any way you guys at ADI could create a custom build of the CM3WSD application with increased timeout values or perhap configurable timeout values? I suspect that something about the custom hardware is causing the application to take long than expected to respond to the message. During my initial development I used an oscilloscope to time the write and erase operations and the timeout values of the CM3WSD application. In my tests I found that an erase command in my custom bootloader takes approximately 21.4 milliseconds from the time I put together a complete message from the serial port to the time I send an ACK to the CM3WSD application. It seems the application times out between 22 and 23 milliseconds. That's a pretty tight window. My only other choice would be to write my own serial downloader application with longer timeouts. And I would really like to avoid that. Any of your help would be greatly appreciated.

Outcomes