From: Bill Davy on
Hi

Well, it does seem to write one very big slab of RAM (in excess of 8K).
This to to an FX2LP of course. I limit EzUsb transfers to 1024 and CyUsb
transfers to 4096. Not sure why, but it works. I'd be happy to zip up the
source code, if anyone is interested; it's simple C++ under Microsoft Visual
C++ 2003'ish, but it is just a lash up.

Rgds,

Bill

Opened: \\.\ezusb-0
Writing 1 bytes of RAM at 0xe600
Writing 69 bytes of RAM at 0x0
Writing 15 bytes of RAM at 0x46
Writing 8570 bytes of RAM at 0x56
Reading 69 bytes of RAM at 0x0
Reading 15 bytes of RAM at 0x46
Reading 8570 bytes of RAM at 0x56
RAM verified
Writing 1 bytes of RAM at 0xe600
Waiting 5 seconds to enumerate
Opened:
\\?\usb#vid_16cb&pid_8f00#serno.0000#{f618a337-2b7a-4115-aeaf-578a16a66677}
Writing 8711 bytes of EEPROM at 0x0
Writing took 0.831 milliseconds
Reading 8711 bytes of EEPROM at 0x0
Reading took 0.351 milliseconds
EEPROM verified



CreatFile(\\.\ezusb-0, ...): The system cannot find the file specified.
Opened:
\\?\usb#vid_16cb&pid_8f00#serno.0000#{f618a337-2b7a-4115-aeaf-578a16a66677}
Writing 1 bytes of RAM at 0xe600
Writing 69 bytes of RAM at 0x0
Writing 15 bytes of RAM at 0x46
Writing 8570 bytes of RAM at 0x56
Reading 69 bytes of RAM at 0x0
Reading 15 bytes of RAM at 0x46
Reading 8570 bytes of RAM at 0x56
RAM verified
Writing 1 bytes of RAM at 0xe600
Waiting 5 seconds to enumerate
Opened:
\\?\usb#vid_16cb&pid_8f00#serno.0000#{f618a337-2b7a-4115-aeaf-578a16a66677}
Writing 8711 bytes of EEPROM at 0x0
Writing took 0.832 milliseconds
Reading 8711 bytes of EEPROM at 0x0
Reading took 0.34 milliseconds
EEPROM verified


"runner" <emb(a)dded> wrote in message
news:46706ba8$0$37203$4fafbaef(a)reader3.news.tin.it...
>
>> > As i told you i don't remember where i read about the 8K limitation.
>> > (Perhaps i had a vision). But i remember that John Hyde used the
>> > "mover code trick" in a loader driver. I didn't base my driver on that
> so
>> > i can't tell you more. Note: the driver was for the older version of
>> > the
>> > ez-usb chip, AN21xx.
>>
>> Eeek. Another generation! Well done on surviving.
>>
>
> Now i recall where i read about the 8K limit. It was not in the manual, it
> was at
>
> http://pages.cpsc.ucalgary.ca/~walpole/525/FRIESS%20and%20MCNEIL/code/USB-FPGA/fx2comms/fx2comms.cpp
>
> Read the comment above the function:
>
> FX2COMMS_API int fx2_load_firmware(char *filename)
>
> I found a copy of the general purpose driver specs. The ANCHOR_DOWNLOAD
> ioctl says that the download size must be <= 7K. "fx2_load_firmware" uses
> that.
>
> The VENDOR_OR_CLASS_REQUEST you're using now doesn't say anything about
> the
> size. Do you write 9K in just one large transfer?
>
>
>


From: runner on

"Bill Davy" <Bill(a)SynectixLtd.com> wrote in message
news:-sidnTUqfb6wkOzbRVnyiwA(a)bt.com...
> Hi
>
> Well, it does seem to write one very big slab of RAM (in excess of 8K).
> This to to an FX2LP of course. I limit EzUsb transfers to 1024 and CyUsb
> transfers to 4096. Not sure why, but it works. I'd be happy to zip up
the
> source code, if anyone is interested; it's simple C++ under Microsoft
Visual
> C++ 2003'ish, but it is just a lash up.
>

Thanks for the code :) but i'm not using Cypress' tools.
I guess that this 8K limit will remain a mystery. I have the impression
that if the start address is at an offset that is lower than 8K the
transfer will succeed even if a big chunk exceeds the address 0x2000.
On the other hand, if you write a chunk that is completely contained
in the range [8k,16k[ it might fail. I don't know for sure. Anyway i don't
have much time to setup a test. I just remember that when i told the
compiler to put "initialized" xdata above 0x2000 the code didn't
find the expected data and behaved incorrectly. When i put the
xdata @ 0x1200 (for example) everything worked fine.
When i say "completely contained" i mean a line like ":LL200000..."
in the ".ihx" file, where LL is the record length.



From: Bill Davy on

"runner" <emb(a)dded> wrote in message
news:46712139$0$37204$4fafbaef(a)reader3.news.tin.it...
>
> "Bill Davy" <Bill(a)SynectixLtd.com> wrote in message
> news:-sidnTUqfb6wkOzbRVnyiwA(a)bt.com...
>> Hi
>>
>> Well, it does seem to write one very big slab of RAM (in excess of 8K).
>> This to to an FX2LP of course. I limit EzUsb transfers to 1024 and CyUsb
>> transfers to 4096. Not sure why, but it works. I'd be happy to zip up
> the
>> source code, if anyone is interested; it's simple C++ under Microsoft
> Visual
>> C++ 2003'ish, but it is just a lash up.
>>
>
> Thanks for the code :) but i'm not using Cypress' tools.
> I guess that this 8K limit will remain a mystery. I have the impression
> that if the start address is at an offset that is lower than 8K the
> transfer will succeed even if a big chunk exceeds the address 0x2000.
> On the other hand, if you write a chunk that is completely contained
> in the range [8k,16k[ it might fail. I don't know for sure. Anyway i don't
> have much time to setup a test. I just remember that when i told the
> compiler to put "initialized" xdata above 0x2000 the code didn't
> find the expected data and behaved incorrectly. When i put the
> xdata @ 0x1200 (for example) everything worked fine.
> When i say "completely contained" i mean a line like ":LL200000..."
> in the ".ihx" file, where LL is the record length.
>
>
>

Many thanks for that information.

And just to conclude this tale with a last curiosity, the Cypress core seems
to mishandle 0xA0 In requests (which I use to read back RAM for
verification) if the offset is odd (it is treated as next even offset
below).

And now back to real work, the code that has been downloaded.

Bill


From: runner on

"Bill Davy" <Bill(a)SynectixLtd.com> wrote in message
news:L8Gdncm3ebOhsuzbRVnytwA(a)bt.com...
>
> "runner" <emb(a)dded> wrote in message
> news:46712139$0$37204$4fafbaef(a)reader3.news.tin.it...
> >
> > "Bill Davy" <Bill(a)SynectixLtd.com> wrote in message
> > news:-sidnTUqfb6wkOzbRVnyiwA(a)bt.com...
> >> Hi
> >>
> >> Well, it does seem to write one very big slab of RAM (in excess of 8K).
> >> This to to an FX2LP of course. I limit EzUsb transfers to 1024 and
CyUsb
> >> transfers to 4096. Not sure why, but it works. I'd be happy to zip up
> > the
> >> source code, if anyone is interested; it's simple C++ under Microsoft
> > Visual
> >> C++ 2003'ish, but it is just a lash up.
> >>
> >
> > Thanks for the code :) but i'm not using Cypress' tools.
> > I guess that this 8K limit will remain a mystery. I have the impression
> > that if the start address is at an offset that is lower than 8K the
> > transfer will succeed even if a big chunk exceeds the address 0x2000.
> > On the other hand, if you write a chunk that is completely contained
> > in the range [8k,16k[ it might fail. I don't know for sure. Anyway i
don't
> > have much time to setup a test. I just remember that when i told the
> > compiler to put "initialized" xdata above 0x2000 the code didn't
> > find the expected data and behaved incorrectly. When i put the
> > xdata @ 0x1200 (for example) everything worked fine.
> > When i say "completely contained" i mean a line like ":LL200000..."
> > in the ".ihx" file, where LL is the record length.
> >
> >
> >
>
> Many thanks for that information.
>
> And just to conclude this tale with a last curiosity, the Cypress core
seems
> to mishandle 0xA0 In requests (which I use to read back RAM for
> verification) if the offset is odd (it is treated as next even offset
> below).
>
> And now back to real work, the code that has been downloaded.
>
> Bill

The manual states that the start address must be word aligned.
(chapter 3.8 at the top of page 3-12)


From: Bill Davy on

"runner" <emb(a)dded> wrote in message
news:46713bda$0$4788$4fafbaef(a)reader4.news.tin.it...
>
> "Bill Davy" <Bill(a)SynectixLtd.com> wrote in message
> news:L8Gdncm3ebOhsuzbRVnytwA(a)bt.com...
>>
>> "runner" <emb(a)dded> wrote in message
>> news:46712139$0$37204$4fafbaef(a)reader3.news.tin.it...
>> >
>> > "Bill Davy" <Bill(a)SynectixLtd.com> wrote in message
>> > news:-sidnTUqfb6wkOzbRVnyiwA(a)bt.com...
>> >> Hi
>> >>
>> >> Well, it does seem to write one very big slab of RAM (in excess of
>> >> 8K).
>> >> This to to an FX2LP of course. I limit EzUsb transfers to 1024 and
> CyUsb
>> >> transfers to 4096. Not sure why, but it works. I'd be happy to zip
>> >> up
>> > the
>> >> source code, if anyone is interested; it's simple C++ under Microsoft
>> > Visual
>> >> C++ 2003'ish, but it is just a lash up.
>> >>
>> >
>> > Thanks for the code :) but i'm not using Cypress' tools.
>> > I guess that this 8K limit will remain a mystery. I have the impression
>> > that if the start address is at an offset that is lower than 8K the
>> > transfer will succeed even if a big chunk exceeds the address 0x2000.
>> > On the other hand, if you write a chunk that is completely contained
>> > in the range [8k,16k[ it might fail. I don't know for sure. Anyway i
> don't
>> > have much time to setup a test. I just remember that when i told the
>> > compiler to put "initialized" xdata above 0x2000 the code didn't
>> > find the expected data and behaved incorrectly. When i put the
>> > xdata @ 0x1200 (for example) everything worked fine.
>> > When i say "completely contained" i mean a line like ":LL200000..."
>> > in the ".ihx" file, where LL is the record length.
>> >
>> >
>> >
>>
>> Many thanks for that information.
>>
>> And just to conclude this tale with a last curiosity, the Cypress core
> seems
>> to mishandle 0xA0 In requests (which I use to read back RAM for
>> verification) if the offset is odd (it is treated as next even offset
>> below).
>>
>> And now back to real work, the code that has been downloaded.
>>
>> Bill
>
> The manual states that the start address must be word aligned.
> (chapter 3.8 at the top of page 3-12)
>
>

Interesting. My printed copy (v2.1) does not have such a comment anywhere
is Section 3.8 (though it is on pps 3-11 and 3-12) but it does apply to the
FX2 (just tried it). I just checked EZ USB_TRM.pdf (Last Updated 21 Mar,
2007) on the Cypress web site and it does indeed note that the address must
be word aligned for Upload. Better get myself a copy.

Bill

PS Why do so many examples use EA to freeze/release interrupts when
accessing shared data? I use ES0 for the serial port, ET0 for timer 0, and
reserve EA for the global enable at start up. But then I may have a problem
with interrupts.