Shop OBEX P1 Docs P2 Docs Learn Events
atmel AT45D0xx serial flash — Parallax Forums

atmel AT45D0xx serial flash

ArchiverArchiver Posts: 46,084
edited 2000-04-19 22:16 in General Discussion
Ryan -

Here is a copy of what I kept, from the original Stamp List.

Have phun !

Regards,

Bruce


>Date: Mon, 8 Mar 1999 14:23:55 -0500
>From: Tracy Allen <emesys@c...>
>Subject: [noparse][[/noparse]STAMPS] atmel AT45D0xx serial flash
>To: "INTERNET:stamps@p..." <stamps@p...>
>Sender: owner-stamps@p...
>Reply-To: stamps@p...
>X-MIME-Autoconverted: from quoted-printable to 8bit by mh005.infi.net id
PAA25011
>
>Gregory Whitmore <gwhitmore@m...> wrote:
>> I have a few serial-flash-eeproms from ATMEL. They are
>> the AT45D041, 512k (I think). I was wondering if it
>> is possible to interface these with the stamp2. Maybe
>> to just hold data to send to a LCD. Can anyone help
>> with the coding? ....
>
>Bruce Bates <bvbates@i...> replied
>> ...big snip...
>> This is a rather sophisticated device you're working
>> with - to say the least.
>
>
>Gregory,
>
>I agree with Bruce. To take full advantage of this memory chip's
>capabilities you should be looking at a BS2SX with a whole bank dedicated
>to memory management.
>
>That said, I think you can do some useful stuff with it on a BS2. It could
>hold lots of messages for your LCD. With read-only messages, it won't
>require too much code.
>
>Here is a working (mileage may vary) demo, to get you started. There is a
>subroutine called "sndcmd" ("send command") that is called at the beginning
>of each cycle of instructions. It parses the page and address bits and
>sends the extra don't care bits if required. I hope this helps.
>
> -- Tracy Allen
> mailto:emesys@c...
> http://go.ourworld.nu/emesys/
>
>
>' demo program for ATMEL AT45D0xx flash/ram
>' (c) 1999, Tracy Allen, eme systems
>' demos commands for writing and reading
>' the RAM and the flash array.
>'
>' The hardware connections are:
>'
>' BS2 or BS2SX AT45D0xx
>' p8 atcs ----> cs\ chip select
>' p9 sck ----> sck serial clock
>' pA sdo ----> si serial data in
>' pB sdi <---- so serial data out
>' wp\ and reset\ tied high.
>'
>pmax con 1024 ' AT45D021 number of pages
> ' at 264 bytes per page
> ' 256kbytes+ FLASH
> ' +528 bytes RAM
>cmd var byte ' AT45D0xx command
>page var word ' which page?
>adrs var byte ' which byte?
> ' bytes 0-255 used for data
> ' bytes 256-263 not used in demo
>ix var byte ' general purpose index
>x var byte ' data byte to/from device
>
>msg data "why do we do it?" ' demo data
>
>atcs con 8 ' AT45Dxx chip select pin
>sck con 9 ' serial clock pin
>sdo con 10 ' serial data out pin
>sdi con 11 ' serial data in pin
>sdin var in11 ' serial input pin status, alias
>
>outs=%0000000111100001 ' p8 chip select is high
> 'fedcba9876543210
>dirs=%1111011111111111 ' pB is serial data input
> ' other pins as needed
>
>main:
>'
write demo data to buffer 1
> cmd=$84 ' write to buffer 1
> adrs=0 ' from the top
> gosub sndcmd ' send command
> for ix=0 to 15 ' send 16 bytes
> read msg+ix,x ' demo data bytes
> shiftout sdo,sck,msbfirst,[noparse][[/noparse]x\8] ' to buffer 1
> debug x ' show them
> next
> high atcs ' end of command
> debug cr
>'
>'
read back 16 bytes from buffer 1
> cmd=$54 ' read from buffer 1
> adrs=0 ' from the top
> gosub sndcmd ' send command
> for ix=0 to 15 ' read 16 bytes
> shiftin sdi,sck,msbpost,[noparse][[/noparse]x] ' from AT45D0xx
> debug x ' show them
> next
> high atcs ' end of command
> debug cr
>'
>'
erase & prog. a flash page from buffer 1
> cmd=$83 ' erase flash & write buffer 1
> random page ' pick a page at random
> page=page//pmax ' limit to valid pages
> debug hex4 page,cr ' show page#
> gosub sndcmd ' send command
> high atcs ' initiate the business
> gosub waitrdy ' wait for not_busy flag
>' pause 20 ' OR, just wait maximum
> ' OR, poll hardware busy\ flag
>'
>'
read back 16 bytes direct from flash
> cmd=$52 ' read flash page direct
> ' same flash page
> adrs=0 ' from the top
> gosub sndcmd ' send command
> for ix=0 to 15 ' read 16 bytes
> shiftin sdi,sck,msbpost,[noparse][[/noparse]x\8] ' from flash
> debug x ' show them
> next
> high atcs ' finished
> debug cr,cr
>'
> pause 2000
>goto main ' do it again
>end
>
>'
subroutine sends command to AT45Dxxx
>' send command, page (shifted left one), 8 bit address
>' send extra required clocking for commands $52 to $56
>' leave chip selected on return for completion of command
>sndcmd:
> low atcs ' chip select
> shiftout sdo,sck,msbfirst,[noparse][[/noparse]cmd\8,page<<1\16,adrs\8]
> if cmd>$56 then sndend
> shiftout sdo,sck,msbfirst,[noparse][[/noparse]0\8]
> if cmd>$52 then sndend
> shiftout sdo,sck,msbfirst,[noparse][[/noparse]0\16,0\8]
>sndend:
> return
>
>'
subroutine tests AT45Dxxx busy flag
>' needs up to 20 mS to complete erase+page write.
>' sends command and gets first data bit
>' polls busy flag until it equals 1,
>' or until watchdog times out=>error.
>' alternative--use 20 mS blind delay.
>' alternative--poll the hardware busy flag
>waitrdy:
> low atcs
> shiftout sdo,sck,msbfirst,[noparse][[/noparse]$ae\9]
> ' 8 bits of command $57 + one extra clock cycle
> ix=255
>wr1:
> ix=ix-1 ' watchdog
> of sdin-1*ix then wr1
> high atcs
> if ix=0 then ATerror
>return
>
>'
flash write failed
>ATerror:
> debug "flash busy",cr
>return
>
>
>
>- To subscribe -or- unsubscribe send e-mail to majordomo@p... and
>- put SUBSCRIBE stamps -or- UNSUBSCRIBE stamps in the body of the message
>
>

Comments

  • ArchiverArchiver Posts: 46,084
    edited 2000-04-19 22:16
    Bruce,
    AWSOME!
    thanks a zillion
    ryan

    Original Message
    From: Bruce Bates <bvbates@i...>
    To: <basicstamps@egroups.com>
    Sent: Wednesday, April 19, 2000 4:57 PM
    Subject: [noparse][[/noparse]basicstamps] [noparse][[/noparse]STAMPS] atmel AT45D0xx serial flash


    > Ryan -
    >
    > Here is a copy of what I kept, from the original Stamp List.
    >
    > Have phun !
    >
    > Regards,
    >
    > Bruce
    >
    >
    > >Date: Mon, 8 Mar 1999 14:23:55 -0500
    > >From: Tracy Allen <emesys@c...>
    > >Subject: [noparse][[/noparse]STAMPS] atmel AT45D0xx serial flash
    > >To: "INTERNET:stamps@p..." <stamps@p...>
    > >Sender: owner-stamps@p...
    > >Reply-To: stamps@p...
    > >X-MIME-Autoconverted: from quoted-printable to 8bit by mh005.infi.net id
    > PAA25011
    > >
    > >Gregory Whitmore <gwhitmore@m...> wrote:
    > >> I have a few serial-flash-eeproms from ATMEL. They are
    > >> the AT45D041, 512k (I think). I was wondering if it
    > >> is possible to interface these with the stamp2. Maybe
    > >> to just hold data to send to a LCD. Can anyone help
    > >> with the coding? ....
    > >
    > >Bruce Bates <bvbates@i...> replied
    > >> ...big snip...
    > >> This is a rather sophisticated device you're working
    > >> with - to say the least.
    > >
    > >
    > >Gregory,
    > >
    > >I agree with Bruce. To take full advantage of this memory chip's
    > >capabilities you should be looking at a BS2SX with a whole bank dedicated
    > >to memory management.
    > >
    > >That said, I think you can do some useful stuff with it on a BS2. It
    could
    > >hold lots of messages for your LCD. With read-only messages, it won't
    > >require too much code.
    > >
    > >Here is a working (mileage may vary) demo, to get you started. There is a
    > >subroutine called "sndcmd" ("send command") that is called at the
    beginning
    > >of each cycle of instructions. It parses the page and address bits and
    > >sends the extra don't care bits if required. I hope this helps.
    > >
    > > -- Tracy Allen
    > > mailto:emesys@c...
    > > http://go.ourworld.nu/emesys/
    > >
    > >
    > >' demo program for ATMEL AT45D0xx flash/ram
    > >' (c) 1999, Tracy Allen, eme systems
    > >' demos commands for writing and reading
    > >' the RAM and the flash array.
    > >'
    > >' The hardware connections are:
    > >'
    > >' BS2 or BS2SX AT45D0xx
    > >' p8 atcs ----> cs\ chip select
    > >' p9 sck ----> sck serial clock
    > >' pA sdo ----> si serial data in
    > >' pB sdi <---- so serial data out
    > >' wp\ and reset\ tied high.
    > >'
    > >pmax con 1024 ' AT45D021 number of pages
    > > ' at 264 bytes per page
    > > ' 256kbytes+ FLASH
    > > ' +528 bytes RAM
    > >cmd var byte ' AT45D0xx command
    > >page var word ' which page?
    > >adrs var byte ' which byte?
    > > ' bytes 0-255 used for data
    > > ' bytes 256-263 not used in demo
    > >ix var byte ' general purpose index
    > >x var byte ' data byte to/from device
    > >
    > >msg data "why do we do it?" ' demo data
    > >
    > >atcs con 8 ' AT45Dxx chip select pin
    > >sck con 9 ' serial clock pin
    > >sdo con 10 ' serial data out pin
    > >sdi con 11 ' serial data in pin
    > >sdin var in11 ' serial input pin status, alias
    > >
    > >outs=%0000000111100001 ' p8 chip select is high
    > > 'fedcba9876543210
    > >dirs=%1111011111111111 ' pB is serial data input
    > > ' other pins as needed
    > >
    > >main:
    > >'
    write demo data to buffer 1
    > > cmd=$84 ' write to buffer 1
    > > adrs=0 ' from the top
    > > gosub sndcmd ' send command
    > > for ix=0 to 15 ' send 16 bytes
    > > read msg+ix,x ' demo data bytes
    > > shiftout sdo,sck,msbfirst,[noparse][[/noparse]x\8] ' to buffer 1
    > > debug x ' show them
    > > next
    > > high atcs ' end of command
    > > debug cr
    > >'
    > >'
    read back 16 bytes from buffer 1
    > > cmd=$54 ' read from buffer 1
    > > adrs=0 ' from the top
    > > gosub sndcmd ' send command
    > > for ix=0 to 15 ' read 16 bytes
    > > shiftin sdi,sck,msbpost,[noparse][[/noparse]x] ' from AT45D0xx
    > > debug x ' show them
    > > next
    > > high atcs ' end of command
    > > debug cr
    > >'
    > >'
    erase & prog. a flash page from buffer 1
    > > cmd=$83 ' erase flash & write buffer 1
    > > random page ' pick a page at random
    > > page=page//pmax ' limit to valid pages
    > > debug hex4 page,cr ' show page#
    > > gosub sndcmd ' send command
    > > high atcs ' initiate the business
    > > gosub waitrdy ' wait for not_busy flag
    > >' pause 20 ' OR, just wait maximum
    > > ' OR, poll hardware busy\ flag
    > >'
    > >'
    read back 16 bytes direct from flash
    > > cmd=$52 ' read flash page direct
    > > ' same flash page
    > > adrs=0 ' from the top
    > > gosub sndcmd ' send command
    > > for ix=0 to 15 ' read 16 bytes
    > > shiftin sdi,sck,msbpost,[noparse][[/noparse]x\8] ' from flash
    > > debug x ' show them
    > > next
    > > high atcs ' finished
    > > debug cr,cr
    > >'
    > > pause 2000
    > >goto main ' do it again
    > >end
    > >
    > >'
    subroutine sends command to AT45Dxxx
    > >' send command, page (shifted left one), 8 bit address
    > >' send extra required clocking for commands $52 to $56
    > >' leave chip selected on return for completion of command
    > >sndcmd:
    > > low atcs ' chip select
    > > shiftout sdo,sck,msbfirst,[noparse][[/noparse]cmd\8,page<<1\16,adrs\8]
    > > if cmd>$56 then sndend
    > > shiftout sdo,sck,msbfirst,[noparse][[/noparse]0\8]
    > > if cmd>$52 then sndend
    > > shiftout sdo,sck,msbfirst,[noparse][[/noparse]0\16,0\8]
    > >sndend:
    > > return
    > >
    > >'
    subroutine tests AT45Dxxx busy flag
    > >' needs up to 20 mS to complete erase+page write.
    > >' sends command and gets first data bit
    > >' polls busy flag until it equals 1,
    > >' or until watchdog times out=>error.
    > >' alternative--use 20 mS blind delay.
    > >' alternative--poll the hardware busy flag
    > >waitrdy:
    > > low atcs
    > > shiftout sdo,sck,msbfirst,[noparse][[/noparse]$ae\9]
    > > ' 8 bits of command $57 + one extra clock cycle
    > > ix=255
    > >wr1:
    > > ix=ix-1 ' watchdog
    > > of sdin-1*ix then wr1
    > > high atcs
    > > if ix=0 then ATerror
    > >return
    > >
    > >'
    flash write failed
    > >ATerror:
    > > debug "flash busy",cr
    > >return
    > >
    > >
    > >
    > >- To subscribe -or- unsubscribe send e-mail to majordomo@p...
    and
    > >- put SUBSCRIBE stamps -or- UNSUBSCRIBE stamps in the body of the message
    > >
    > >
    >
    >
    >
Sign In or Register to comment.